Files
unshell/unshell-lib/src/module/manager_connection.rs
T

33 lines
958 B
Rust
Raw Normal View History

2025-11-25 17:31:09 -07:00
use crate::{Announcement, ModuleError, module::Manager, network::Stream};
2025-11-25 15:22:14 -07:00
impl Manager {
2025-11-25 17:31:09 -07:00
pub fn add_connection(&mut self, connection: Box<dyn Stream<Announcement>>) {
2025-11-25 15:22:14 -07:00
self.connections.push(connection);
}
pub fn prune_connections(&mut self) {
self.connections.retain(|c| c.is_alive());
}
pub fn recv_connection_announcements(&mut self) {
// Collect all incoming announcements
let announcements = self
.connections
2025-11-25 17:31:09 -07:00
.iter_mut()
.map(|c| c.try_read())
2025-11-25 15:22:14 -07:00
.flat_map(|array| array)
.collect::<Vec<Announcement>>();
for announcement in announcements {
self.recv_announcement(&announcement)
}
}
2025-11-25 17:31:09 -07:00
pub fn broadcast(&mut self, announcement: Announcement) -> Result<(), ModuleError> {
for connection in &mut self.connections {
connection.write(announcement.clone())?;
}
Ok(())
}
2025-11-25 15:22:14 -07:00
}