feat: clear channel state on socket reconnect
This commit is contained in:
parent
db4015f4f6
commit
69c88d1a30
|
|
@ -39,6 +39,7 @@ object RealtimeSocket {
|
|||
|
||||
Log.d("RealtimeSocket", "Connected to websocket.")
|
||||
updateDisconnectionState(DisconnectionState.Connected)
|
||||
invalidateAllChannelStates()
|
||||
|
||||
// Send authorization frame
|
||||
val authFrame = AuthorizationFrame("Authenticate", token)
|
||||
|
|
@ -166,11 +167,18 @@ object RealtimeSocket {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun invalidateAllChannelStates() {
|
||||
channelCallbacks.forEach { (_, callback) ->
|
||||
callback.onStateInvalidate()
|
||||
}
|
||||
}
|
||||
|
||||
interface ChannelCallback {
|
||||
fun onStartTyping(typing: ChannelStartTypingFrame)
|
||||
fun onStopTyping(typing: ChannelStopTypingFrame)
|
||||
fun onMessage(message: MessageFrame)
|
||||
fun onStateInvalidate()
|
||||
}
|
||||
|
||||
private val channelCallbacks: SnapshotStateMap<String, ChannelCallback> = mutableStateMapOf()
|
||||
|
|
|
|||
|
|
@ -156,6 +156,11 @@ class ChannelScreenViewModel : ViewModel() {
|
|||
_typingUsers.remove(typing.user)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStateInvalidate() {
|
||||
fetchMessages()
|
||||
_typingUsers.clear()
|
||||
}
|
||||
}
|
||||
|
||||
private fun registerCallback() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue