feat: clear channel state on socket reconnect

This commit is contained in:
Infi 2023-01-19 16:06:26 +01:00
parent db4015f4f6
commit 69c88d1a30
2 changed files with 13 additions and 0 deletions

View File

@ -39,6 +39,7 @@ object RealtimeSocket {
Log.d("RealtimeSocket", "Connected to websocket.") Log.d("RealtimeSocket", "Connected to websocket.")
updateDisconnectionState(DisconnectionState.Connected) updateDisconnectionState(DisconnectionState.Connected)
invalidateAllChannelStates()
// Send authorization frame // Send authorization frame
val authFrame = AuthorizationFrame("Authenticate", token) val authFrame = AuthorizationFrame("Authenticate", token)
@ -167,10 +168,17 @@ object RealtimeSocket {
} }
} }
private fun invalidateAllChannelStates() {
channelCallbacks.forEach { (_, callback) ->
callback.onStateInvalidate()
}
}
interface ChannelCallback { interface ChannelCallback {
fun onStartTyping(typing: ChannelStartTypingFrame) fun onStartTyping(typing: ChannelStartTypingFrame)
fun onStopTyping(typing: ChannelStopTypingFrame) fun onStopTyping(typing: ChannelStopTypingFrame)
fun onMessage(message: MessageFrame) fun onMessage(message: MessageFrame)
fun onStateInvalidate()
} }
private val channelCallbacks: SnapshotStateMap<String, ChannelCallback> = mutableStateMapOf() private val channelCallbacks: SnapshotStateMap<String, ChannelCallback> = mutableStateMapOf()

View File

@ -156,6 +156,11 @@ class ChannelScreenViewModel : ViewModel() {
_typingUsers.remove(typing.user) _typingUsers.remove(typing.user)
} }
} }
override fun onStateInvalidate() {
fetchMessages()
_typingUsers.clear()
}
} }
private fun registerCallback() { private fun registerCallback() {