bamboo_engine/runtime/execution/
session_events.rs1use std::collections::HashMap;
8use std::sync::Arc;
9
10use tokio::sync::{broadcast, RwLock};
11
12use bamboo_agent_core::AgentEvent;
13
14pub const SESSION_EVENT_CHANNEL_CAPACITY: usize = 1000;
16
17pub async fn get_or_create_event_sender(
23 senders: &Arc<RwLock<HashMap<String, broadcast::Sender<AgentEvent>>>>,
24 session_id: &str,
25) -> broadcast::Sender<AgentEvent> {
26 {
27 let read = senders.read().await;
28 if let Some(sender) = read.get(session_id) {
29 return sender.clone();
30 }
31 }
32
33 let mut write = senders.write().await;
34 if let Some(sender) = write.get(session_id) {
36 return sender.clone();
37 }
38
39 let (sender, _) = broadcast::channel(SESSION_EVENT_CHANNEL_CAPACITY);
40 write.insert(session_id.to_string(), sender.clone());
41 sender
42}