50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import type { AlarmEvent, RealtimeData } from '../types/platform'
|
|
|
|
type TimeSyncPayload = {
|
|
time_sync: string
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
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
|
|
}
|