use std::sync::Mutex;
#[derive(Debug)]
pub struct EventEmitter<T: Copy> {
senders: Mutex<Vec<async_channel::Sender<T>>>,
}
impl<T: Copy> EventEmitter<T> {
pub fn new() -> Self {
Self {
senders: Mutex::new(Vec::new()),
}
}
pub fn create_receiver(&self) -> async_channel::Receiver<T> {
let mut senders = self.senders.lock().unwrap();
let (tx, rx) = async_channel::unbounded();
senders.push(tx);
rx
}
pub fn emit(&self, event: T) {
let mut senders = self.senders.lock().unwrap();
senders.retain(|sender| sender.send_blocking(event).is_ok());
}
}