Files
usa/src/api/websocket.ts
2026-03-02 23:21:07 +08:00

31 lines
755 B
TypeScript

type Handler = (data: unknown) => void
let ws: WebSocket | null = null
let handler: Handler | null = null
function getUrl(): string {
return `${window.location.origin.replace(/^http/, 'ws')}/ws`
}
export function connectSituationWebSocket(onData: Handler): () => void {
handler = onData
if (ws?.readyState === WebSocket.OPEN) return () => {}
ws = new WebSocket(getUrl())
ws.onmessage = (e) => {
try {
const msg = JSON.parse(e.data)
if (msg.type === 'situation') handler?.({ situation: msg.data, stats: msg.stats })
} catch (_) {}
}
ws.onclose = () => {
ws = null
setTimeout(() => handler && connectSituationWebSocket(handler), 3000)
}
return () => {
handler = null
ws?.close()
ws = null
}
}