🐛 Resubscribe to events after reconnect
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user