emcp/frontend/src/websocket/client.ts
2026-05-26 16:13:35 +08:00

38 lines
1.0 KiB
TypeScript

import type { AlarmEvent, RealtimeData } from '../types/platform'
function buildWsUrl(path: string): string {
return `ws://localhost:8000${path}`
}
export function connectRealtime(onMessage: (data: RealtimeData) => void): WebSocket {
const socket = new WebSocket(buildWsUrl('/ws/real-time'))
socket.onmessage = (event) => {
const payload = JSON.parse(event.data)
onMessage(payload.data)
}
return socket
}
export function connectRealtimeWithLifecycle(
onMessage: (data: RealtimeData) => void,
handlers: {
onOpen?: () => void
onClose?: () => void
onError?: () => void
},
): WebSocket {
const socket = connectRealtime(onMessage)
socket.onopen = () => handlers.onOpen?.()
socket.onclose = () => handlers.onClose?.()
socket.onerror = () => handlers.onError?.()
return socket
}
export function connectAlarm(onMessage: (data: AlarmEvent) => void): WebSocket {
const socket = new WebSocket(buildWsUrl('/ws/alarm'))
socket.onmessage = (event) => {
onMessage(JSON.parse(event.data))
}
return socket
}