Files
pmomusic/pmocontrol/src/events.rs
2025-12-06 12:48:21 +01:00

34 lines
868 B
Rust

use std::sync::{Arc, Mutex};
use crossbeam_channel::{Receiver, Sender, unbounded};
use crate::model::RendererEvent;
#[derive(Clone, Default)]
pub(crate) struct RendererEventBus {
subscribers: Arc<Mutex<Vec<Sender<RendererEvent>>>>,
}
impl RendererEventBus {
pub(crate) fn new() -> Self {
Self {
subscribers: Arc::new(Mutex::new(Vec::new())),
}
}
pub(crate) fn subscribe(&self) -> Receiver<RendererEvent> {
let (tx, rx) = unbounded::<RendererEvent>();
{
let mut subscribers = self.subscribers.lock().unwrap();
subscribers.push(tx);
}
rx
}
#[allow(dead_code)]
pub(crate) fn broadcast(&self, event: RendererEvent) {
let mut subscribers = self.subscribers.lock().unwrap();
subscribers.retain(|tx| tx.send(event.clone()).is_ok());
}
}