From 48a1dd1588962b82d0d8f686f2d8b5e6590d379d Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 18 Oct 2022 14:57:31 +0200 Subject: [PATCH] Delete room when no participants are left --- Cargo.lock | 1 + crates/collab/src/rpc.rs | 7 ++++++- crates/collab/src/rpc/store.rs | 2 +- crates/live_kit_server/Cargo.toml | 1 + crates/live_kit_server/src/api.rs | 4 ++++ 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4814befcb4..1b946b4084 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3197,6 +3197,7 @@ dependencies = [ "futures 0.3.24", "hmac 0.12.1", "jwt", + "log", "prost 0.8.0", "prost-build", "prost-types 0.8.0", diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index 70e47a755e..bca9cad12f 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -890,11 +890,16 @@ impl Server { ) -> impl Future> { let client = self.app_state.live_kit_client.clone(); let room_name = room.live_kit_room.clone(); + let participant_count = room.participants.len(); async move { if let Some(client) = client { client - .remove_participant(room_name, connection_id.to_string()) + .remove_participant(room_name.clone(), connection_id.to_string()) .await?; + + if participant_count == 0 { + client.delete_room(room_name).await?; + } } Ok(()) diff --git a/crates/collab/src/rpc/store.rs b/crates/collab/src/rpc/store.rs index df8be453b1..6fa84d7f10 100644 --- a/crates/collab/src/rpc/store.rs +++ b/crates/collab/src/rpc/store.rs @@ -495,7 +495,7 @@ impl Store { } }); - let room = if room.participants.is_empty() && room.pending_participant_user_ids.is_empty() { + let room = if room.participants.is_empty() { Cow::Owned(self.rooms.remove(&room_id).unwrap()) } else { Cow::Borrowed(self.rooms.get(&room_id).unwrap()) diff --git a/crates/live_kit_server/Cargo.toml b/crates/live_kit_server/Cargo.toml index 7cc9d82333..8cd0b36c7c 100644 --- a/crates/live_kit_server/Cargo.toml +++ b/crates/live_kit_server/Cargo.toml @@ -12,6 +12,7 @@ doctest = false anyhow = "1.0.38" futures = "0.3" hmac = "0.12" +log = "0.4" jwt = "0.16" prost = "0.8" prost-types = "0.8" diff --git a/crates/live_kit_server/src/api.rs b/crates/live_kit_server/src/api.rs index d14cedd64a..8ba94be43a 100644 --- a/crates/live_kit_server/src/api.rs +++ b/crates/live_kit_server/src/api.rs @@ -110,6 +110,7 @@ impl Client { let client = self.http.clone(); let token = token::create(&self.key, &self.secret, None, grant); let url = format!("{}/{}", self.url, path); + log::info!("Request {}: {:?}", url, body); async move { let token = token?; let response = client @@ -119,9 +120,12 @@ impl Client { .body(body.encode_to_vec()) .send() .await?; + if response.status().is_success() { + log::info!("Response {}: {:?}", url, response.status()); Ok(Res::decode(response.bytes().await?)?) } else { + log::error!("Response {}: {:?}", url, response.status()); Err(anyhow!( "POST {} failed with status code {:?}, {:?}", url,