use std::sync::mpsc::{channel, Receiver, Sender};
use std::sync::Mutex;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ClientEvent {
Online,
Offline,
Status(u32, u32),
}
#[derive(Default)]
pub struct Hub {
subs: Mutex<Vec<Sender<ClientEvent>>>,
}
impl Hub {
pub fn new() -> Hub {
Hub::default()
}
pub fn subscribe(&self) -> Receiver<ClientEvent> {
let (tx, rx) = channel();
self.subs.lock().unwrap().push(tx);
rx
}
pub fn emit(&self, ev: ClientEvent) {
self.subs
.lock()
.unwrap()
.retain(|tx| tx.send(ev.clone()).is_ok());
}
}