|
|
import config from "../config.js"
|
|
|
|
|
|
let websocket = {}
|
|
|
|
|
|
// 服务器接口地址
|
|
|
websocket.url = config.wss
|
|
|
// 链接是否打开
|
|
|
websocket.isSocketOpen = false
|
|
|
// 心跳定时,每30s执行一次
|
|
|
websocket.timer = ''
|
|
|
// 每Xs执行一次心跳数据发送
|
|
|
websocket.seconds = 30
|
|
|
|
|
|
/**
|
|
|
* 创建链接并监听打开&报错事件&关闭事件
|
|
|
* @date 2022-05-17
|
|
|
*/
|
|
|
websocket.init = function() {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
// 创建一个 WebSocket 连接。
|
|
|
uni.connectSocket({
|
|
|
url: this.url,
|
|
|
success: (res) => {
|
|
|
console.log('connectSocketSuccess', res)
|
|
|
},
|
|
|
fail: (res) => {
|
|
|
console.log('connectSocketFail', res)
|
|
|
},
|
|
|
complete: (res) => {
|
|
|
// console.log('connectSocketComplete', res)
|
|
|
}
|
|
|
})
|
|
|
|
|
|
// 监听WebSocket连接打开事件
|
|
|
uni.onSocketOpen((res) => {
|
|
|
console.log('onSocketOpen', res)
|
|
|
|
|
|
this.isSocketOpen = true
|
|
|
|
|
|
//发送心跳数据
|
|
|
this.timer = setInterval(() => {
|
|
|
this.sendMessage({
|
|
|
type: 'heart_beat',
|
|
|
send_type: 'to_self',
|
|
|
data: {
|
|
|
content: '发送心跳数据'
|
|
|
}
|
|
|
})
|
|
|
}, this.seconds * 1000)
|
|
|
|
|
|
resolve(res)
|
|
|
})
|
|
|
|
|
|
// 监听WebSocket错误
|
|
|
uni.onSocketError((res) => {
|
|
|
console.log('onSocketError', res)
|
|
|
reject(res)
|
|
|
})
|
|
|
|
|
|
// 监听WebSocket关闭
|
|
|
uni.onSocketClose((res) => {
|
|
|
console.log('onSocketClose', res)
|
|
|
this.isSocketOpen = false
|
|
|
|
|
|
// 关闭心跳
|
|
|
if (this.timer) {
|
|
|
clearInterval(this.timer)
|
|
|
}
|
|
|
reject(res)
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 通过 WebSocket 连接发送数据
|
|
|
* @date 2022-05-18
|
|
|
*/
|
|
|
websocket.sendMessage = function(data) {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
if (!this.isSocketOpen) {
|
|
|
reject('当前websocket连接未打开')
|
|
|
return false
|
|
|
}
|
|
|
uni.sendSocketMessage({
|
|
|
data: JSON.stringify(data),
|
|
|
success: (res) => {
|
|
|
console.log('sendMessageSuccess', res)
|
|
|
resolve(res)
|
|
|
},
|
|
|
fail: (res) => {
|
|
|
console.log('sendMessageFail', res)
|
|
|
reject(res)
|
|
|
}
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 关闭 WebSocket 连接
|
|
|
* @date 2022-05-18
|
|
|
*/
|
|
|
websocket.closeSocket = function() {
|
|
|
// 更改websocket状态为关闭
|
|
|
this.isSocketOpen = false
|
|
|
|
|
|
uni.closeSocket()
|
|
|
}
|
|
|
|
|
|
export default websocket
|