From 0214f587a5c81ae68afe295404cdd165e463f0ed Mon Sep 17 00:00:00 2001 From: Julien Oculi Date: Wed, 14 May 2025 10:16:06 +0200 Subject: [PATCH] fix(islands/IsOnline): avoid concurrent websocket and refactor `openSocket` --- islands/IsOnline.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/islands/IsOnline.tsx b/islands/IsOnline.tsx index 0c9e7df..065acd3 100644 --- a/islands/IsOnline.tsx +++ b/islands/IsOnline.tsx @@ -40,19 +40,19 @@ export default function IsOnline( return <>{displayed} } -function openSocket(status: Signal) { +function openSocket(status: Signal, timeout = 5_000) { const socket = new WebSocket( `wss://${location.host}/api/serviceworker/is-online`, ) - socket.addEventListener('open', () => { - status.value = true - const id = Number(sessionStorage.getItem('$cohabit.is-online.id') ?? -1) - clearInterval(id) - }) + + setTimeout(() => { + if (socket.OPEN || socket.CONNECTING) return + socket.close() + }, timeout) + + socket.addEventListener('open', () => status.value = true) socket.addEventListener('close', () => { status.value = false - // Try reconnect every 5s - const id = setInterval(() => openSocket(status), 5_000) - sessionStorage.setItem('$cohabit.is-online.id', id.toString()) + setTimeout(() => openSocket(status), timeout) }) }