2025-09-18 02:56:59 +03:00
|
|
|
use std::sync::OnceLock;
|
|
|
|
|
use tokio::sync::broadcast;
|
|
|
|
|
use uuid::Uuid;
|
|
|
|
|
|
|
|
|
|
#[derive(Clone, Debug)]
|
|
|
|
|
pub enum SyncEvent {
|
2025-10-24 18:11:34 +03:00
|
|
|
InboundChanged(Uuid), // server_id
|
2025-09-18 02:56:59 +03:00
|
|
|
UserAccessChanged(Uuid), // server_id
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static EVENT_SENDER: OnceLock<broadcast::Sender<SyncEvent>> = OnceLock::new();
|
|
|
|
|
|
|
|
|
|
/// Initialize the event bus and return a receiver
|
|
|
|
|
pub fn init_event_bus() -> broadcast::Receiver<SyncEvent> {
|
|
|
|
|
let (tx, rx) = broadcast::channel(100);
|
|
|
|
|
EVENT_SENDER.set(tx).expect("Event bus already initialized");
|
|
|
|
|
rx
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Send a sync event (non-blocking)
|
|
|
|
|
pub fn send_sync_event(event: SyncEvent) {
|
|
|
|
|
if let Some(sender) = EVENT_SENDER.get() {
|
|
|
|
|
match sender.send(event.clone()) {
|
|
|
|
|
Ok(_) => tracing::info!("Event sent: {:?}", event),
|
|
|
|
|
Err(_) => tracing::warn!("No event receivers"),
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
tracing::error!("Event bus not initialized");
|
|
|
|
|
}
|
2025-10-24 18:11:34 +03:00
|
|
|
}
|