From 002dc36ab9be6f0ef1ad01b60a5cd35647f9f4af Mon Sep 17 00:00:00 2001 From: Jordan Yelloz Date: Wed, 28 Feb 2024 09:13:12 -0700 Subject: [PATCH] livekit_signaller: Improved shutdown behavior Without sending a Leave request to the server before disconnecting, the disconnected client will appear present and stuck in the room for a little while until the server removes it due to inactivity. After this change, the disconnecting client will immediately leave the room. Part-of: --- net/webrtc/src/livekit_signaller/imp.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/net/webrtc/src/livekit_signaller/imp.rs b/net/webrtc/src/livekit_signaller/imp.rs index d2f61a5a..3f667ad9 100644 --- a/net/webrtc/src/livekit_signaller/imp.rs +++ b/net/webrtc/src/livekit_signaller/imp.rs @@ -516,6 +516,17 @@ impl Signaller { } } } + + async fn close_signal_client(signal_client: &signal_client::SignalClient) { + signal_client + .send(proto::signal_request::Message::Leave(proto::LeaveRequest { + can_reconnect: false, + reason: proto::DisconnectReason::ClientInitiated as i32, + ..Default::default() + })) + .await; + signal_client.close().await; + } } impl SignallableImpl for Signaller { @@ -745,7 +756,7 @@ impl SignallableImpl for Signaller { if let Some(connection) = self.connection.lock().unwrap().take() { block_on(connection.signal_task).unwrap(); - block_on(connection.signal_client.close()); + block_on(Self::close_signal_client(&connection.signal_client)); } }