fix(islands/IsOnline): avoid concurrent websocket and refactor openSocket
This commit is contained in:
parent
171655bb08
commit
0214f587a5
|
|
@ -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())
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue