use std::collections::HashMap;
use std::sync::Arc;
use tokio::sync::{broadcast, RwLock};
use bamboo_agent_core::AgentEvent;
pub const SESSION_EVENT_CHANNEL_CAPACITY: usize = 1000;
pub async fn get_or_create_event_sender(
senders: &Arc<RwLock<HashMap<String, broadcast::Sender<AgentEvent>>>>,
session_id: &str,
) -> broadcast::Sender<AgentEvent> {
{
let read = senders.read().await;
if let Some(sender) = read.get(session_id) {
return sender.clone();
}
}
let mut write = senders.write().await;
if let Some(sender) = write.get(session_id) {
return sender.clone();
}
let (sender, _) = broadcast::channel(SESSION_EVENT_CHANNEL_CAPACITY);
write.insert(session_id.to_string(), sender.clone());
sender
}