1
0
mirror of https://gitlab.com/comunic/comunicapiv3 synced 2024-12-27 22:18:51 +00:00

Close concurrent call accesses

This commit is contained in:
Pierre HUBERT 2021-02-10 18:26:19 +01:00
parent 5194a389af
commit 024d83619d
2 changed files with 22 additions and 3 deletions

View File

@ -72,8 +72,25 @@ pub fn join_call(r: &mut UserWsRequestHandler) -> RequestResult {
r.forbidden("This conversation can not be used to make calls!".to_string())?;
}
// TODO : Remove any previous call linked to current connection + any other active connection
// of current user to current conversation call
// Remove any other active call with current WebSocket
if let Some(call) = &r.get_conn().active_call {
make_user_leave_call(&call.conv_id, r.get_conn())?;
}
// Remove any other active connection to current call of current user
user_ws_controller::foreach_connection(|conn| {
if &conn.user_id != r.user_id_ref()? || conn.session.eq(&r.get_conn().session) {
return Ok(());
}
if let Some(call) = &conn.active_call {
if call.conv_id == conv_id {
make_user_leave_call(&call.conv_id, conn)?;
}
}
Ok(())
})?;
r.update_conn(|r| r.active_call = Some(ActiveCall {
conv_id,

View File

@ -573,7 +573,9 @@ pub fn disconnect_user_from_all_sockets(user_id: &UserID) -> Res {
/// Do something with all active connections
pub fn foreach_connection<F>(mut f: F) -> Res
where F: FnMut(&UserWsConnection) -> Res {
for conn in get_ws_connections_list().lock().unwrap().iter() {
let list = get_ws_connections_list().lock().unwrap().clone();
for conn in list.iter() {
f(conn)?;
}