Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
xuning
/
livekitAndroidXuningTest
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
davidliu
2022-10-24 22:18:01 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Committed by
GitHub
2022-10-24 22:18:01 +0900
Commit
df2fee4f4b2f34b39627d873d4c504bc55f96133
df2fee4f
1 parent
cec0b2bd
Send participant sid on reconnect (#156)
* Add participant sid when reconnecting * tests
隐藏空白字符变更
内嵌
并排对比
正在显示
5 个修改的文件
包含
35 行增加
和
10 行删除
livekit-android-sdk/src/main/java/io/livekit/android/ConnectOptions.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/RTCEngine.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/SignalClient.kt
livekit-android-sdk/src/test/java/io/livekit/android/room/RTCEngineMockE2ETest.kt
livekit-android-sdk/src/test/java/io/livekit/android/room/SignalClientTest.kt
livekit-android-sdk/src/main/java/io/livekit/android/ConnectOptions.kt
查看文件 @
df2fee4
...
...
@@ -25,4 +25,5 @@ data class ConnectOptions(
val protocolVersion: ProtocolVersion = ProtocolVersion.v8
) {
internal var reconnect: Boolean = false
internal var participantSid: String? = null
}
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/RTCEngine.kt
查看文件 @
df2fee4
...
...
@@ -86,6 +86,7 @@ internal constructor(
private var sessionToken: String? = null
private var connectOptions: ConnectOptions? = null
private var lastRoomOptions: RoomOptions? = null
private var participantSid: String? = null
private val publisherObserver = PublisherTransportObserver(this, client)
private val subscriberObserver = SubscriberTransportObserver(this, client)
...
...
@@ -163,6 +164,12 @@ internal constructor(
return
}
participantSid = if (joinResponse.hasParticipant()) {
joinResponse.participant.sid
} else {
null
}
// update ICE servers before creating PeerConnection
val iceServers = if (connectOptions?.iceServers != null) {
connectOptions.iceServers
...
...
@@ -312,6 +319,7 @@ internal constructor(
sessionToken = null
connectOptions = null
lastRoomOptions = null
participantSid = null
reconnectingJob?.cancel()
reconnectingJob = null
coroutineScope.close()
...
...
@@ -392,7 +400,7 @@ internal constructor(
LKLog.v { "Attempting soft reconnect." }
subscriber.prepareForIceRestart()
try {
client.reconnect(url, token)
client.reconnect(url, token
, participantSid
)
// no join response for regular reconnects
client.onReadyForResponses()
} catch (e: Exception) {
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/SignalClient.kt
查看文件 @
df2fee4
...
...
@@ -88,12 +88,15 @@ constructor(
/**
* @throws Exception if fails to connect.
*/
suspend fun reconnect(url: String, token: String) {
suspend fun reconnect(url: String, token: String
, participantSid: String?
) {
connect(
url,
token,
(lastOptions ?: ConnectOptions()).copy()
.apply { reconnect = true },
.apply {
reconnect = true
this.participantSid = participantSid
},
lastRoomOptions ?: RoomOptions()
)
}
...
...
@@ -141,6 +144,9 @@ constructor(
if (options.reconnect) {
queryParams.add(CONNECT_QUERY_RECONNECT to 1.toString())
options.participantSid?.let { sid ->
queryParams.add(CONNECT_QUERY_PARTICIPANT_SID to sid)
}
}
val autoSubscribe = if (options.autoSubscribe) 1 else 0
...
...
@@ -671,6 +677,7 @@ constructor(
const val CONNECT_QUERY_OS = "os"
const val CONNECT_QUERY_OS_VERSION = "os_version"
const val CONNECT_QUERY_NETWORK_TYPE = "network"
const val CONNECT_QUERY_PARTICIPANT_SID = "sid"
const val SD_TYPE_ANSWER = "answer"
const val SD_TYPE_OFFER = "offer"
...
...
livekit-android-sdk/src/test/java/io/livekit/android/room/RTCEngineMockE2ETest.kt
查看文件 @
df2fee4
...
...
@@ -30,7 +30,7 @@ class RTCEngineMockE2ETest : MockE2ETest() {
@Test
fun iceSubscriberConnect() = runTest {
connect()
Assert.
assertEquals(
assertEquals(
SignalClientTest.OFFER.offer.sdp,
rtcEngine.subscriber.peerConnection.remoteDescription.description
)
...
...
@@ -43,9 +43,9 @@ class RTCEngineMockE2ETest : MockE2ETest() {
val subPeerConnection = rtcEngine.subscriber.peerConnection as MockPeerConnection
val localAnswer = subPeerConnection.localDescription ?: throw IllegalStateException("no answer was created.")
Assert.assertTrue(sentRequest.hasAnswer())
Assert.assertEquals(localAnswer.description, sentRequest.answer.sdp)
Assert.assertEquals(localAnswer.type.canonicalForm(), sentRequest.answer.type)
Assert.assertEquals(ConnectionState.CONNECTED, rtcEngine.connectionState)
assertEquals(localAnswer.description, sentRequest.answer.sdp)
assertEquals(localAnswer.type.canonicalForm(), sentRequest.answer.type)
assertEquals(ConnectionState.CONNECTED, rtcEngine.connectionState)
}
@Test
...
...
@@ -95,7 +95,7 @@ class RTCEngineMockE2ETest : MockE2ETest() {
testScheduler.advanceUntilIdle()
val newToken = wsFactory.request.url.queryParameter(SignalClient.CONNECT_QUERY_TOKEN)
Assert.assertNotEquals(oldToken, newToken)
Assert.
assertEquals(SignalClientTest.REFRESH_TOKEN.refreshToken, newToken)
assertEquals(SignalClientTest.REFRESH_TOKEN.refreshToken, newToken)
}
@Test
...
...
@@ -114,4 +114,13 @@ class RTCEngineMockE2ETest : MockE2ETest() {
val pubPeerConnection = rtcEngine.subscriber.peerConnection as MockPeerConnection
assertEquals(PeerConnection.IceTransportsType.RELAY, pubPeerConnection.rtcConfig.iceTransportsType)
}
fun participantIdOnReconnect() = runTest {
connect()
wsFactory.listener.onFailure(wsFactory.ws, Exception(), null)
testScheduler.advanceUntilIdle()
val sid = wsFactory.request.url.queryParameter(SignalClient.CONNECT_QUERY_PARTICIPANT_SID)
assertEquals(SignalClientTest.JOIN.join.participant.sid, sid)
}
}
\ No newline at end of file
...
...
livekit-android-sdk/src/test/java/io/livekit/android/room/SignalClientTest.kt
查看文件 @
df2fee4
...
...
@@ -82,7 +82,7 @@ class SignalClientTest : BaseTest() {
@Test
fun reconnect() = runTest {
val job = async {
client.reconnect(EXAMPLE_URL, "")
client.reconnect(EXAMPLE_URL, ""
, "participant_sid"
)
}
client.onOpen(wsFactory.ws, createOpenResponse(wsFactory.request))
...
...
@@ -197,7 +197,7 @@ class SignalClientTest : BaseTest() {
client.sendMuteTrack("sid", true)
client.sendMuteTrack("sid", true)
val job = async { client.reconnect(EXAMPLE_URL, "") }
val job = async { client.reconnect(EXAMPLE_URL, ""
, "participant_sid"
) }
client.onOpen(wsFactory.ws, createOpenResponse(wsFactory.request))
job.await()
...
...
请
注册
或
登录
后发表评论