David Zhao

explicit leave when disconnect requested, stop all tracks, including remote

... ... @@ -205,8 +205,15 @@ constructor(
sendRequest(request)
}
fun sendLeave() {
val request = LivekitRtc.SignalRequest.newBuilder()
.setLeave(LivekitRtc.LeaveRequest.newBuilder().build())
.build()
sendRequest(request)
}
fun sendRequest(request: LivekitRtc.SignalRequest) {
private fun sendRequest(request: LivekitRtc.SignalRequest) {
Timber.v { "sending request: $request" }
if (!isConnected || currentWs == null) {
throw IllegalStateException("not connected!")
... ...
... ... @@ -66,6 +66,7 @@ constructor(
}
fun disconnect() {
engine.client.sendLeave()
handleDisconnect()
}
... ... @@ -137,8 +138,14 @@ constructor(
}
private fun handleDisconnect() {
for (track in localParticipant?.tracks.values) {
track.track?.stop()
for (pub in localParticipant.tracks.values) {
pub.track?.stop()
}
// stop remote tracks too
for (p in remoteParticipants.values) {
for (pub in p.tracks.values) {
pub.track?.stop()
}
}
engine.close()
state = State.DISCONNECTED
... ...