Files
zgty-mas-m/nx/helper/measure.js
2025-10-11 16:25:24 +08:00

180 lines
4.1 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 { getWebSocketUrl } from '@/defaultBaseUrl'
export default {
isOpen: false,
isOpening: false,
socketTask: false,
timeoutID: -1,
regData: '',
webSocketUrl: getWebSocketUrl(),
//开始心跳
heartbeatStart() {
if (this.timeoutID != -1) {
this.heartbeatClear()
}
this.timeoutID = setTimeout(() => {
this.socketTask.send({
data: 'ping'
})
}, 15000)
},
//清理心跳
heartbeatClear() {
clearTimeout(this.timeoutID)
},
//重置心跳
heartbeatReset() {
this.heartbeatClear()
this.heartbeatStart()
},
//注册用户
regUser() {
this.socketTask.send({
data: this.regData
})
},
//设置连接注册数据
setRegData(regData) {
this.regData = regData
},
//打开连接
open() {
if (this.regData === '') {
console.log('请先调用setRegData方法设置注册数据')
return
}
//防止重复连接
if (this.isOpening) {
console.log('WebSocket正在连接。。。')
return
}
if (this.isOpen && this.socketTask) {
console.log('WebSocket已连接。。。')
return
}
// console.log("WebSocket开始连接。。。");
this.isOpening = true
let socketTask = uni.connectSocket({
url: this.webSocketUrl,
header: {
'content-type': 'application/json'
},
success: e => {
// console.log(e);
},
complete: () => {}
})
if (!socketTask) return
// console.log(socketTask);
this.socketTask = socketTask
//监听开启
socketTask.onOpen(res => {
this.isOpen = true
this.isOpening = false
// console.log("WebSocket连接成功。。。");
this.regUser(this.regData)
})
//监听消息
socketTask.onMessage(res => {
if (res.data.replace(/^\s+|\s+$/g, '') === 'pong') {
this.heartbeatReset()
return
}
let data = JSON.parse(res.data)
this.message(data)
})
//监听关闭
socketTask.onClose(res => {
this.isOpen = false
this.isOpening = false
this.socketTask = false
// console.log("WebSocket连接关闭。。。");
uni.$emit('connClose', res)
this.heartbeatClear()
this.reOpen()
})
//监听错误
socketTask.onError(res => {
this.isOpen = false
this.isOpening = false
this.socketTask = false
console.log('WebSocket连接失败。。。')
this.heartbeatClear()
this.reOpen()
})
},
//消息处理
message(data) {
switch (data.cmd) {
case 'replyRegister':
if (data.data.success) {
console.log('注册成功!')
//注册成功开始心跳
this.heartbeatStart()
}
break
case 'replyControlMeasurePoint':
uni.$emit('controlMeasurePoint', data)
break
case 'replyControlDevice':
uni.$emit('controlDevice', data.data)
break
case 'deviceStatus':
uni.$emit('deviceStatus', data.data)
break
case 'deviceData':
uni.$emit('deviceData', data.data)
break
case 'sellerData':
uni.$emit('sellerData', data.data)
break
case 'buyerData':
uni.$emit('buyerData', data.data)
break
case 'goodsData':
uni.$emit('goodsData', data.data)
break
case 'logData':
uni.$emit('logData', data.data)
break
case 'measurePointStatus':
uni.$emit('measurePointStatus', data.data)
break
case 'replyMeasureData':
uni.$emit('replyMeasureData', data.data)
break
case 'replySaveMeasureData':
uni.$emit('replySaveMeasureData', data.data)
break
}
},
//重新打开
reOpen() {
this.timeoutID = setTimeout(() => {
this.open()
}, 5000)
},
//关闭连接
close() {
if (this.isOpen) {
this.socketTask.close()
}
},
//发送消息
send(data) {
console.log('发送消息。。。', data)
if (!this.isOpen) {
//关闭则打开
this.open()
}
if (this.socketTask) {
this.socketTask.send({
data: data
})
}
}
}