emcp/frontend/src/websocket/client.ts

38 lines
1.0 KiB
TypeScript
Raw Normal View History

2026-05-18 09:12:14 +08:00
import type { AlarmEvent, RealtimeData } from '../types/platform'
function buildWsUrl(path: string): string {
return `ws://127.0.0.1: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
}