Files
klp-mono/apps/hand-factory/utils/socketMeasure.js
2026-01-05 14:29:33 +08:00

63 lines
1.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import config from '@/config'
/**
* 测量数据 WebSocket与 l2/socket/index.vue 类似)
* 默认订阅 type=track_measure
*/
export function createMeasureSocket({
type = 'track_measure',
onOpen,
onClose,
onError,
onMessage
} = {}) {
let socket = null
let manualClose = false
const wsBase = (config.wsUrl || config.baseUrl || '').replace(/^http/, 'ws')
const url = `${wsBase}/websocket?type=${type}`
function connect() {
manualClose = false
socket = new WebSocket(url)
socket.onopen = () => {
onOpen && onOpen()
}
socket.onmessage = (evt) => {
onMessage && onMessage(evt.data)
}
socket.onerror = (err) => {
onError && onError(err)
}
socket.onclose = (evt) => {
onClose && onClose(evt)
if (!manualClose) {
setTimeout(connect, 3000)
}
}
}
function close() {
manualClose = true
if (socket) {
socket.close(1000, 'client close')
socket = null
}
}
function send(data) {
if (socket && socket.readyState === WebSocket.OPEN) {
socket.send(JSON.stringify(data));
} else {
console.error('WebSocket is not open. Cannot send message.');
}
}
return { connect, close, send }
}