fix(islands/IsOnline): avoid concurrent websocket and refactor openSocket

This commit is contained in:
Julien Oculi 2025-05-14 10:16:06 +02:00
parent 171655bb08
commit 0214f587a5

View file

@ -40,19 +40,19 @@ export default function IsOnline(
return <>{displayed}</> return <>{displayed}</>
} }
function openSocket(status: Signal<boolean>) { function openSocket(status: Signal<boolean>, timeout = 5_000) {
const socket = new WebSocket( const socket = new WebSocket(
`wss://${location.host}/api/serviceworker/is-online`, `wss://${location.host}/api/serviceworker/is-online`,
) )
socket.addEventListener('open', () => {
status.value = true setTimeout(() => {
const id = Number(sessionStorage.getItem('$cohabit.is-online.id') ?? -1) if (socket.OPEN || socket.CONNECTING) return
clearInterval(id) socket.close()
}) }, timeout)
socket.addEventListener('open', () => status.value = true)
socket.addEventListener('close', () => { socket.addEventListener('close', () => {
status.value = false status.value = false
// Try reconnect every 5s setTimeout(() => openSocket(status), timeout)
const id = setInterval(() => openSocket(status), 5_000)
sessionStorage.setItem('$cohabit.is-online.id', id.toString())
}) })
} }