davidliu

full reconnect on leave with canReconnect

@@ -76,6 +76,8 @@ internal constructor( @@ -76,6 +76,8 @@ internal constructor(
76 } 76 }
77 77
78 private var reconnectingJob: Job? = null 78 private var reconnectingJob: Job? = null
  79 + private var fullReconnectOnNext = false
  80 +
79 private val pendingTrackResolvers: MutableMap<String, Continuation<LivekitModels.TrackInfo>> = 81 private val pendingTrackResolvers: MutableMap<String, Continuation<LivekitModels.TrackInfo>> =
80 mutableMapOf() 82 mutableMapOf()
81 private var sessionUrl: String? = null 83 private var sessionUrl: String? = null
@@ -340,7 +342,8 @@ internal constructor( @@ -340,7 +342,8 @@ internal constructor(
340 LKLog.w { "couldn't reconnect, no url or no token" } 342 LKLog.w { "couldn't reconnect, no url or no token" }
341 return 343 return
342 } 344 }
343 - 345 + val forceFullReconnect = fullReconnectOnNext
  346 + fullReconnectOnNext = false
344 val job = coroutineScope.launch { 347 val job = coroutineScope.launch {
345 connectionState = ConnectionState.RECONNECTING 348 connectionState = ConnectionState.RECONNECTING
346 listener?.onEngineReconnecting() 349 listener?.onEngineReconnecting()
@@ -356,7 +359,7 @@ internal constructor( @@ -356,7 +359,7 @@ internal constructor(
356 delay(startDelay) 359 delay(startDelay)
357 360
358 // full reconnect after first try. 361 // full reconnect after first try.
359 - val isFullReconnect = retries != 0 362 + val isFullReconnect = retries != 0 || forceFullReconnect
360 363
361 if (isFullReconnect) { 364 if (isFullReconnect) {
362 try { 365 try {
@@ -676,9 +679,14 @@ internal constructor( @@ -676,9 +679,14 @@ internal constructor(
676 } 679 }
677 680
678 override fun onLeave(leave: LivekitRtc.LeaveRequest) { 681 override fun onLeave(leave: LivekitRtc.LeaveRequest) {
  682 + if (leave.canReconnect) {
  683 + // reconnect will be triggered on close.
  684 + fullReconnectOnNext = true
  685 + } else {
679 close() 686 close()
680 listener?.onEngineDisconnected("server leave") 687 listener?.onEngineDisconnected("server leave")
681 } 688 }
  689 + }
682 690
683 // Signal error 691 // Signal error
684 override fun onError(error: Throwable) { 692 override fun onError(error: Throwable) {