Files
klp-mono/apps/hand-factory/utils/socketMeasure.js

72 lines
1.4 KiB
JavaScript
Raw Normal View History

2026-01-05 14:29:33 +08:00
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}`
console.log(url)
2026-01-05 14:29:33 +08:00
function connect() {
manualClose = false
// socket = new WebSocket(url)
socket = uni.connectSocket({
url,
success() {
console.log('连接成功')
}
})
console.log(socket)
socket.onOpen = () => {
console.log('连接成功')
2026-01-05 14:29:33 +08:00
onOpen && onOpen()
}
socket.onMessage = (evt) => {
2026-01-05 14:29:33 +08:00
onMessage && onMessage(evt.data)
}
socket.onError = (err) => {
2026-01-05 14:29:33 +08:00
onError && onError(err)
}
socket.onClose = (evt) => {
2026-01-05 14:29:33 +08:00
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 }
}