Change summary
crates/call/src/room.rs | 9
crates/live_kit_client/LiveKitBridge/Sources/LiveKitBridge/LiveKitBridge.swift | 6
crates/live_kit_client/src/live_kit_client.rs | 6
3 files changed, 19 insertions(+), 2 deletions(-)
Detailed changes
@@ -50,7 +50,9 @@ impl Entity for Room {
type Event = Event;
fn release(&mut self, _: &mut MutableAppContext) {
- self.client.send(proto::LeaveRoom { id: self.id }).log_err();
+ if self.status.is_online() {
+ self.client.send(proto::LeaveRoom { id: self.id }).log_err();
+ }
}
}
@@ -210,6 +212,7 @@ impl Room {
self.pending_participants.clear();
self.participant_user_ids.clear();
self.subscriptions.clear();
+ self.live_kit_room.take();
self.client.send(proto::LeaveRoom { id: self.id })?;
Ok(())
}
@@ -630,4 +633,8 @@ impl RoomStatus {
pub fn is_offline(&self) -> bool {
matches!(self, RoomStatus::Offline)
}
+
+ pub fn is_online(&self) -> bool {
+ matches!(self, RoomStatus::Online)
+ }
}
@@ -83,6 +83,12 @@ public func LKRoomConnect(room: UnsafeRawPointer, url: CFString, token: CFString
}
}
+@_cdecl("LKRoomDisconnect")
+public func LKRoomDisconnect(room: UnsafeRawPointer) {
+ let room = Unmanaged<Room>.fromOpaque(room).takeUnretainedValue()
+ room.disconnect()
+}
+
@_cdecl("LKRoomPublishVideoTrack")
public func LKRoomPublishVideoTrack(room: UnsafeRawPointer, track: UnsafeRawPointer, callback: @escaping @convention(c) (UnsafeRawPointer, CFString?) -> Void, callback_data: UnsafeRawPointer) {
let room = Unmanaged<Room>.fromOpaque(room).takeUnretainedValue()
@@ -43,6 +43,7 @@ extern "C" {
callback: extern "C" fn(*mut c_void, CFStringRef),
callback_data: *mut c_void,
);
+ fn LKRoomDisconnect(room: *const c_void);
fn LKRoomPublishVideoTrack(
room: *const c_void,
track: *const c_void,
@@ -195,7 +196,10 @@ impl Room {
impl Drop for Room {
fn drop(&mut self) {
- unsafe { LKRelease(self.native_room) }
+ unsafe {
+ LKRoomDisconnect(self.native_room);
+ LKRelease(self.native_room);
+ }
}
}