emcp/frontend/src/websocket/client.ts

50 lines
1.3 KiB
TypeScript
Raw Normal View History

2026-05-18 09:12:14 +08:00
import type { AlarmEvent, RealtimeData } from '../types/platform'
2026-06-26 18:06:50 +08:00
type TimeSyncPayload = {
time_sync: string
}
2026-05-18 09:12:14 +08:00
function buildWsUrl(path: string): string {
2026-05-26 16:13:35 +08:00
return `ws://localhost:8000${path}`
2026-05-18 09:12:14 +08:00
}
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
}
2026-06-26 18:06:50 +08:00
export function connectTimeSync(onMessage: (data: { data: TimeSyncPayload }) => void): WebSocket {
const socket = new WebSocket(buildWsUrl('/ws/time-sync'))
socket.onmessage = (event) => {
onMessage(JSON.parse(event.data))
}
return socket
}