use tokio::sync::broadcast;
use super::{ClusterEvent, Subscriber};
#[derive(Clone, Debug)]
pub struct EventManager {
tx: broadcast::Sender<ClusterEvent>,
}
impl EventManager {
#[must_use]
pub fn new(buffer: usize) -> Self {
let cap = buffer.max(1);
let (tx, _) = broadcast::channel(cap);
Self { tx }
}
pub fn publish(&self, event: ClusterEvent) {
let _ = self.tx.send(event);
}
#[must_use]
pub fn subscribe(&self) -> Subscriber {
Subscriber::new(self.tx.subscribe())
}
#[must_use]
pub fn subscriber_count(&self) -> usize {
self.tx.receiver_count()
}
}
impl Default for EventManager {
fn default() -> Self {
Self::new(64)
}
}