🐛 Resubscribe to events after reconnect

This commit is contained in:
Rune Harlyk
2026-01-03 01:28:07 +01:00
committed by nikguin04
parent 72f3650c6e
commit 381ff9463d
+14
View File
@@ -101,6 +101,7 @@ function createWebSocket() {
ping() ping()
set(true) set(true)
clearTimeout(reconnectTimeoutId) clearTimeout(reconnectTimeoutId)
resubscribeAll()
event_listeners.get('open')?.forEach(listener => listener(ev)) event_listeners.get('open')?.forEach(listener => listener(ev))
} }
ws.onmessage = frame => { ws.onmessage = frame => {
@@ -159,6 +160,13 @@ function createWebSocket() {
send(WebsocketMessage.create({ subNotif: sub_msg })) send(WebsocketMessage.create({ subNotif: sub_msg }))
} }
function resubscribeAll() {
for (const tag of message_listeners.keys()) {
const sub_msg = WebsocketMessages.SubscribeNotification.create({ tag })
send(WebsocketMessage.create({ subNotif: sub_msg }))
}
}
function send(data: WebsocketMessage) { function send(data: WebsocketMessage) {
if (!ws || ws.readyState !== WebSocket.OPEN) return if (!ws || ws.readyState !== WebSocket.OPEN) return
const encoded = encodeMessage(data) const encoded = encodeMessage(data)
@@ -189,6 +197,12 @@ function createWebSocket() {
} }
}, },
onEvent: (event_type: SocketEvent, listener: (data: unknown) => void): (() => void) => { onEvent: (event_type: SocketEvent, listener: (data: unknown) => void): (() => void) => {
let listeners = event_listeners.get(event_type)
if (!listeners) {
listeners = new Set()
event_listeners.set(event_type, listeners)
}
listeners.add(listener)
return () => { return () => {
unsubscribe_event(event_type, listener) unsubscribe_event(event_type, listener)
} }