Closed jkbstrmen closed 1 year ago
Wouldn't something like that work?
let rooms = Arc::new(Mutex::new(HashMap::new()));
// create or return room
let room = {
let mut rooms = rooms.lock().await;
match rooms.entry(room_id) {
Entry::Vacant(e) => {
// establish a new broadcast group
let awareness = Arc::new(RwLock::new(Awareness::default()));
let group = Arc::new(BroadcastGroup::new(awareness, BUFFER_CAP).await);
e.insert(group).clone()
}
Entry::Occupied(e) => e.get().clone(), // return existing broadcast group
}
};
Thanks for your answer. That is exactly what I was trying to do. My problem was usage of std::sync::Mutex instead of tokio::sync::Mutex there, which was throwing compile time error future cannot be sent between threads safely.
Great work here by the way. Thanks for that as well.
Hi,
is there a way how to get an already open BroadcastGroup by room name or create new BroadcastGroup if not yet open for room at runtime? I tried to provide Arc<Mutex> for warp filter, but I cannot create new BroadcastGroup and add it to context, in ws_handler because BroadcastGroup::new() is async.
I was thinking about something like this (pseudocode):
Thanks for any suggestions.