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) function connect() { manualClose = false // socket = new WebSocket(url) socket = uni.connectSocket({ url, success() { console.log('连接成功') } }) console.log(socket) socket.onOpen = () => { console.log('连接成功') 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 } }