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,8 +679,13 @@ internal constructor( @@ -676,8 +679,13 @@ internal constructor(
676 } 679 }
677 680
678 override fun onLeave(leave: LivekitRtc.LeaveRequest) { 681 override fun onLeave(leave: LivekitRtc.LeaveRequest) {
679 - close()  
680 - listener?.onEngineDisconnected("server leave") 682 + if (leave.canReconnect) {
  683 + // reconnect will be triggered on close.
  684 + fullReconnectOnNext = true
  685 + } else {
  686 + close()
  687 + listener?.onEngineDisconnected("server leave")
  688 + }
681 } 689 }
682 690
683 // Signal error 691 // Signal error