check that session is the same before joining room locally without to send websocket message

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2023-07-13 16:00:59 +02:00
parent 89aacbae95
commit b0565f5149
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B

View File

@ -84,6 +84,7 @@ class WebSocketInstance internal constructor(
private var internalWebSocket: WebSocket? = null private var internalWebSocket: WebSocket? = null
private val connectionUrl: String private val connectionUrl: String
private var currentRoomToken: String? = null private var currentRoomToken: String? = null
private var currentNormalBackendSession: String? = null
private var reconnecting = false private var reconnecting = false
private val usersHashMap: HashMap<String?, Participant> private val usersHashMap: HashMap<String?, Participant>
private var messagesQueue: MutableList<String> = ArrayList() private var messagesQueue: MutableList<String> = ArrayList()
@ -169,6 +170,7 @@ class WebSocketInstance internal constructor(
isConnected = false isConnected = false
resumeId = "" resumeId = ""
} }
else -> {} else -> {}
} }
} else { } else {
@ -214,8 +216,10 @@ class WebSocketInstance internal constructor(
} }
signalingMessageReceiver.process(eventOverallWebSocketMessage.eventMap) signalingMessageReceiver.process(eventOverallWebSocketMessage.eventMap)
} }
Globals.TARGET_PARTICIPANTS -> Globals.TARGET_PARTICIPANTS ->
signalingMessageReceiver.process(eventOverallWebSocketMessage.eventMap) signalingMessageReceiver.process(eventOverallWebSocketMessage.eventMap)
else -> else ->
Log.i(TAG, "Received unknown/ignored event target: $target") Log.i(TAG, "Received unknown/ignored event target: $target")
} }
@ -292,10 +296,7 @@ class WebSocketInstance internal constructor(
val (_, roomWebSocketMessage) = LoganSquare.parse(text, JoinedRoomOverallWebSocketMessage::class.java) val (_, roomWebSocketMessage) = LoganSquare.parse(text, JoinedRoomOverallWebSocketMessage::class.java)
if (roomWebSocketMessage != null) { if (roomWebSocketMessage != null) {
currentRoomToken = roomWebSocketMessage.roomId currentRoomToken = roomWebSocketMessage.roomId
if ( if (roomWebSocketMessage.roomPropertiesWebSocketMessage != null && !TextUtils.isEmpty(currentRoomToken)) {
roomWebSocketMessage.roomPropertiesWebSocketMessage != null &&
!TextUtils.isEmpty(currentRoomToken)
) {
sendRoomJoinedEvent() sendRoomJoinedEvent()
} }
} }
@ -310,6 +311,7 @@ class WebSocketInstance internal constructor(
Log.d(TAG, "WebSocket " + webSocket.hashCode() + " resumeID " + resumeId + " expired") Log.d(TAG, "WebSocket " + webSocket.hashCode() + " resumeID " + resumeId + " expired")
resumeId = "" resumeId = ""
currentRoomToken = "" currentRoomToken = ""
currentNormalBackendSession = ""
restartWebSocket() restartWebSocket()
} else if ("hello_expected" == message.code) { } else if ("hello_expected" == message.code) {
restartWebSocket() restartWebSocket()
@ -340,6 +342,7 @@ class WebSocketInstance internal constructor(
helloHashMap["oldResumeId"] = oldResumeId helloHashMap["oldResumeId"] = oldResumeId
} else { } else {
currentRoomToken = "" currentRoomToken = ""
currentNormalBackendSession = ""
} }
if (!TextUtils.isEmpty(currentRoomToken)) { if (!TextUtils.isEmpty(currentRoomToken)) {
helloHashMap[Globals.ROOM_TOKEN] = currentRoomToken helloHashMap[Globals.ROOM_TOKEN] = currentRoomToken
@ -386,9 +389,16 @@ class WebSocketInstance internal constructor(
if (!isConnected || reconnecting) { if (!isConnected || reconnecting) {
messagesQueue.add(message) messagesQueue.add(message)
} else { } else {
if (roomToken == currentRoomToken) { if (roomToken == "") {
Log.d(TAG, "sending 'leave room' via websocket")
currentNormalBackendSession = ""
internalWebSocket!!.send(message)
} else if (roomToken == currentRoomToken && normalBackendSession == currentNormalBackendSession) {
Log.d(TAG, "roomToken&session are unchanged. Joining locally without to send websocket message")
sendRoomJoinedEvent() sendRoomJoinedEvent()
} else { } else {
Log.d(TAG, "Sending join room message via websocket")
currentNormalBackendSession = normalBackendSession
internalWebSocket!!.send(message) internalWebSocket!!.send(message)
} }
} }