208 lines
4.3 KiB
JavaScript
208 lines
4.3 KiB
JavaScript
import {
|
||
WS_URL
|
||
} from '@/env'
|
||
import store from '../../store'
|
||
const getDefaultState = () => {
|
||
return {
|
||
socketTask: null,
|
||
interval: null,
|
||
//断线重连定时器
|
||
timer: null,
|
||
//心跳间隔
|
||
timeout: 20000,
|
||
// 当前重连次数
|
||
connectNum: 1,
|
||
//链接是否打开了
|
||
isOpen: false,
|
||
network: true,
|
||
orderPreInterval: null,
|
||
orderRunInterval: null,
|
||
// 存放websocket中onMessage数据
|
||
orderPre: {
|
||
device_id: '',
|
||
pay_type: '',
|
||
is_connect: 0,
|
||
fd: '',
|
||
},
|
||
orderRunItems: [],
|
||
orderRunItem: {
|
||
order: null,
|
||
report: null
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
export default {
|
||
namespaced: true,
|
||
state: getDefaultState(),
|
||
mutations: {
|
||
setWsData(state, data) {
|
||
state.wsData = data
|
||
},
|
||
setOrderPreInterval(state, data) {
|
||
clearTimeout(state.orderPreInterval);
|
||
state.orderPreInterval = setInterval(() => {
|
||
this.dispatch('ws/WEBSOCKET_SEND', JSON.stringify(data));
|
||
}, 10000);
|
||
},
|
||
setOrderRunInterval(state, data) {
|
||
clearTimeout(state.orderRunInterval);
|
||
state.orderRunInterval = setInterval(() => {
|
||
this.dispatch('ws/WEBSOCKET_SEND', JSON.stringify(data));
|
||
}, 15000);
|
||
},
|
||
WEBSOCKET_SEND(state, data) {
|
||
state.socketTask.send({
|
||
data,
|
||
async success() {
|
||
console.log('send', data)
|
||
},
|
||
})
|
||
},
|
||
},
|
||
actions: {
|
||
|
||
reConnect({
|
||
commit,
|
||
state
|
||
}) {
|
||
if (state.connectNum < 20) {
|
||
state.timer = setTimeout(() => {
|
||
this.dispatch('ws/initWs')
|
||
}, 3000)
|
||
state.connectNum += 1;
|
||
} else if (state.connectNum < 50) {
|
||
state.timer = setTimeout(() => {
|
||
this.dispatch('ws/initWs')
|
||
}, 10000)
|
||
state.connectNum += 1;
|
||
} else {
|
||
state.timer = setTimeout(() => {
|
||
this.dispatch('ws/initWs')
|
||
}, 450000)
|
||
state.connectNum += 1;
|
||
}
|
||
},
|
||
initWs({
|
||
commit,
|
||
state
|
||
}) {
|
||
console.log(state.isOpen)
|
||
// 防止重复连接
|
||
if (state.isOpen) {
|
||
return;
|
||
};
|
||
const _this = this;
|
||
//检查网络是否可用
|
||
uni.getNetworkType({
|
||
success(result) {
|
||
console.log(result)
|
||
if (result.networkType == 'none') {
|
||
|
||
state.netWork = false;
|
||
// 网络断开后显示model
|
||
// uni.showModal({
|
||
// title: '网络错误',
|
||
// content: '请检查网络',
|
||
// showCancel: false,
|
||
// success: function(res) {
|
||
|
||
// }
|
||
// })
|
||
return;
|
||
}
|
||
|
||
let url = wsUrl();
|
||
const token = store.state.auth.token.access_token;
|
||
state.socketTask = uni.connectSocket({
|
||
url,
|
||
header: {
|
||
Authorization: token.token_type + ' ' + token.access_token,
|
||
},
|
||
complete: (e) => {
|
||
|
||
},
|
||
});
|
||
|
||
if (!state.socketTask) {
|
||
return;
|
||
};
|
||
// 监听开启
|
||
state.socketTask.onOpen(() => {
|
||
console.log('onOpen')
|
||
// 将连接状态设为已连接
|
||
state.isOpen = true;
|
||
|
||
//开启心跳
|
||
state.interval = setInterval(() => {
|
||
|
||
state.socketTask.send({
|
||
data: 'ping',
|
||
success(res) {
|
||
console.log(res)
|
||
},
|
||
fail(err) {
|
||
console.log('正在尝试重新链接第' + state
|
||
.connectNum + '次');
|
||
uni.showToast({
|
||
title: '正在尝试重新链接第' + state
|
||
.connectNum + '次',
|
||
icon: "none",
|
||
});
|
||
state.isOpen = false;
|
||
//执行重连
|
||
_this.dispatch('ws/reConnect');
|
||
},
|
||
})
|
||
}, state.timeout);
|
||
});
|
||
// 监听信息
|
||
state.socketTask.onMessage(res => {
|
||
console.log('onMessage:' + res.data)
|
||
if (res.data && res.data == 'pong') {
|
||
return;
|
||
}
|
||
let data = JSON.parse(res.data);
|
||
switch (data.action) {
|
||
case 'order_pre':
|
||
state.orderPre = data.data;
|
||
break;
|
||
case 'order_run_items':
|
||
state.orderRunItems = data.data;
|
||
break;
|
||
case 'order_run_item':
|
||
state.orderRunItem = data.data;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
});
|
||
// 监听关闭
|
||
state.socketTask.onClose(() => {
|
||
state.isOpen = false;
|
||
state.socketTask = false;
|
||
//清除定时器
|
||
clearTimeout(state.interval);
|
||
state.interval = null;
|
||
_this.dispatch('ws/reConnect');
|
||
});
|
||
// 监听错误
|
||
state.socketTask.onError((e) => {
|
||
state.isOpen = false;
|
||
state.socketTask = false;
|
||
});
|
||
}
|
||
})
|
||
|
||
},
|
||
WEBSOCKET_SEND({
|
||
commit
|
||
}, data) {
|
||
commit('WEBSOCKET_SEND', data)
|
||
},
|
||
|
||
|
||
}
|
||
} |