websocket
import meApi from '@/common/meApi.js'
let isOpenSocket = false
let heartBeatDelay = 3000
let heartBeatInterval = null
let heartBeatText = ""
let reconnectTimes = 10
let reconnectInterval = null
let reconnectDelay = 3000
let wsUrl = meApi.ws_device
let socketTask = null
let canReconnect = false
let ws = {
socketTask: null,
init,
completeClose
}
function init(agentData, messageCallback) {
var socketTask = uni.connectSocket({
url: wsUrl,
complete: () => {}
})
socketTask.onOpen((res) => {
console.log("ws连接成功")
clearInterval(heartBeatInterval)
clearInterval(reconnectInterval)
isOpenSocket = true
canReconnect = true
send(agentData)
})
socketTask.onMessage((res) => {
onWsMessage(res, messageCallback)
})
socketTask.onClose(() => {
if (isOpenSocket) {
console.log("ws与服务器断开")
} else {
console.log("连接失败")
}
isOpenSocket = false
if (canReconnect) {
reconnect()
canReconnect = false
}
})
ws.socketTask = socketTask
}
function heartBeat() {
heartBeatInterval = setInterval(() => {
console.log(heartBeatText)
send(JSON.stringify(heartBeatText));
}, heartBeatDelay)
}
function onWsMessage(event, messageCallback) {
const jsonStr = event.data
var msg = JSON.parse(jsonStr);
messageCallback(msg)
}
function send(value) {
ws.socketTask.send({
data: value,
async success() {
console.log("消息标识发送成功", value)
}
});
}
function reconnect() {
clearInterval(heartBeatInterval)
if (!isOpenSocket) {
let count = 0;
reconnectInterval = setInterval(() => {
console.log("正在尝试重连")
init();
count++
if (count >= reconnectTimes) {
clearInterval(reconnectInterval)
console.log("网络异常或服务器错误")
}
}, reconnectDelay)
}
}
function completeClose() {
clearInterval(heartBeatInterval)
clearInterval(reconnectInterval)
canReconnect = false
ws.socketTask.close()
}
module.exports = ws
uni.request
const baseUrl = ''
const request = (options = {}) => {
options.header = {
'Authorization': uni.getStorageSync('access_token'),
"Content-Type": "application/x-www-form-urlencoded"
}
return new Promise((resolve, reject) => {
uni.request({
url: baseUrl + options.url || '',
method: options.type || 'GET',
data: options.data || {},
header: options.header || {}
}).then(data => {
let [err, res] = data;
resolve(res);
}).catch(error => {
reject(error)
})
});
}
const get = (url, data, options = {}) => {
options.type = 'GET';
options.data = data;
options.url = url;
return request(options)
}
const post = (url, data, options = {}) => {
options.type = 'POST';
options.data = data;
options.url = url;
return request(options)
}
export default {
request,
get,
post
}