Disconnect from live-kit Room on drop

This commit is contained in:
Antonio Scandurra 2022-10-18 14:50:03 +02:00
parent 47be340cac
commit 9cf39b1da6
3 changed files with 19 additions and 2 deletions

View file

@ -50,8 +50,10 @@ impl Entity for Room {
type Event = Event; type Event = Event;
fn release(&mut self, _: &mut MutableAppContext) { fn release(&mut self, _: &mut MutableAppContext) {
if self.status.is_online() {
self.client.send(proto::LeaveRoom { id: self.id }).log_err(); self.client.send(proto::LeaveRoom { id: self.id }).log_err();
} }
}
} }
impl Room { impl Room {
@ -210,6 +212,7 @@ impl Room {
self.pending_participants.clear(); self.pending_participants.clear();
self.participant_user_ids.clear(); self.participant_user_ids.clear();
self.subscriptions.clear(); self.subscriptions.clear();
self.live_kit_room.take();
self.client.send(proto::LeaveRoom { id: self.id })?; self.client.send(proto::LeaveRoom { id: self.id })?;
Ok(()) Ok(())
} }
@ -630,4 +633,8 @@ impl RoomStatus {
pub fn is_offline(&self) -> bool { pub fn is_offline(&self) -> bool {
matches!(self, RoomStatus::Offline) matches!(self, RoomStatus::Offline)
} }
pub fn is_online(&self) -> bool {
matches!(self, RoomStatus::Online)
}
} }

View file

@ -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") @_cdecl("LKRoomPublishVideoTrack")
public func LKRoomPublishVideoTrack(room: UnsafeRawPointer, track: UnsafeRawPointer, callback: @escaping @convention(c) (UnsafeRawPointer, CFString?) -> Void, callback_data: UnsafeRawPointer) { public func LKRoomPublishVideoTrack(room: UnsafeRawPointer, track: UnsafeRawPointer, callback: @escaping @convention(c) (UnsafeRawPointer, CFString?) -> Void, callback_data: UnsafeRawPointer) {
let room = Unmanaged<Room>.fromOpaque(room).takeUnretainedValue() let room = Unmanaged<Room>.fromOpaque(room).takeUnretainedValue()

View file

@ -43,6 +43,7 @@ extern "C" {
callback: extern "C" fn(*mut c_void, CFStringRef), callback: extern "C" fn(*mut c_void, CFStringRef),
callback_data: *mut c_void, callback_data: *mut c_void,
); );
fn LKRoomDisconnect(room: *const c_void);
fn LKRoomPublishVideoTrack( fn LKRoomPublishVideoTrack(
room: *const c_void, room: *const c_void,
track: *const c_void, track: *const c_void,
@ -195,7 +196,10 @@ impl Room {
impl Drop for Room { impl Drop for Room {
fn drop(&mut self) { fn drop(&mut self) {
unsafe { LKRelease(self.native_room) } unsafe {
LKRoomDisconnect(self.native_room);
LKRelease(self.native_room);
}
} }
} }