davidliu
Committed by GitHub

Send UpdateTrackSettings after resume (#51)

* Send UpdateTrackSettings after resume

* pr comment fixes
... ... @@ -18,7 +18,6 @@ import livekit.LivekitRtc
import org.webrtc.*
import java.net.ConnectException
import java.nio.ByteBuffer
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import javax.inject.Named
import javax.inject.Singleton
... ... @@ -380,14 +379,12 @@ internal constructor(
}
if (connectionState == ConnectionState.CONNECTED) {
if (isFullReconnect) {
listener?.onFullReconnect()
}
listener?.onPostReconnect(isFullReconnect)
return@launch
}
val curReconnectTime = SystemClock.elapsedRealtime() - reconnectStartTime
if(curReconnectTime > MAX_RECONNECT_TIMEOUT){
if (curReconnectTime > MAX_RECONNECT_TIMEOUT) {
break
}
}
... ... @@ -516,9 +513,9 @@ internal constructor(
fun onStreamStateUpdate(streamStates: List<LivekitRtc.StreamStateInfo>)
fun onSubscribedQualityUpdate(subscribedQualityUpdate: LivekitRtc.SubscribedQualityUpdate)
fun onSubscriptionPermissionUpdate(subscriptionPermissionUpdate: LivekitRtc.SubscriptionPermissionUpdate)
fun onSignalConnected(isReconnect: Boolean)
fun onSignalConnected(isResume: Boolean)
fun onFullReconnecting()
suspend fun onFullReconnect()
suspend fun onPostReconnect(isFullReconnect: Boolean)
}
companion object {
... ...
... ... @@ -23,6 +23,7 @@ import io.livekit.android.room.track.*
import io.livekit.android.util.FlowObservable
import io.livekit.android.util.LKLog
import io.livekit.android.util.flowDelegate
import io.livekit.android.util.invoke
import kotlinx.coroutines.*
import livekit.LivekitModels
import livekit.LivekitRtc
... ... @@ -616,9 +617,9 @@ constructor(
/**
* @suppress
*/
override fun onSignalConnected(isReconnect: Boolean) {
if (state == State.RECONNECTING && isReconnect) {
// during reconnection, need to send sync state upon signal connection.
override fun onSignalConnected(isResume: Boolean) {
if (state == State.RECONNECTING && isResume) {
// during resume reconnection, need to send sync state upon signal connection.
sendSyncState()
}
}
... ... @@ -635,8 +636,21 @@ constructor(
/**
* @suppress
*/
override suspend fun onFullReconnect() {
localParticipant.republishTracks()
override suspend fun onPostReconnect(isFullReconnect: Boolean) {
if (isFullReconnect) {
localParticipant.republishTracks()
} else {
val remoteParticipants = remoteParticipants.values.toList()
for (participant in remoteParticipants) {
val pubs = participant.tracks.values.toList()
for (pub in pubs) {
val remotePub = pub as? RemoteTrackPublication ?: continue
if(remotePub.subscribed) {
remotePub.sendUpdateTrackSettings.invoke()
}
}
}
}
}
//------------------------------- ParticipantListener --------------------------------//
... ...
... ... @@ -173,7 +173,7 @@ class RemoteTrackPublication(
}
// Debounce just in case multiple settings get changed at once.
private val sendUpdateTrackSettings = debounce<Unit, Unit>(100L, CoroutineScope(ioDispatcher)) {
internal val sendUpdateTrackSettings = debounce<Unit, Unit>(100L, CoroutineScope(ioDispatcher)) {
sendUpdateTrackSettingsImpl()
}
... ...