180 lines
4.1 KiB
JavaScript
180 lines
4.1 KiB
JavaScript
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
|
||
})
|
||
}
|
||
}
|
||
}
|