123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- let wsurl='wss://' + process.env.VUE_APP_WEBSCOKET + '/ws/';
- let ws = null
- let weboscket_callback = null
- import {getToken,generateUUID } from '@/api/auth';
- import {Message} from 'element-ui'
- //获取 websocket 推送的数据
- let websocketonmessage = e => {
- let data=JSON.parse(e.data)
- if(data.type=="ping"){
- if(ws){
- ws.send('保持连接')
- }
- }
- return weboscket_callback(data);
- }
- // 连接成功
- let websocketonopen = () => {
- console.log('websocket 成功')
- }
- // 连接失败时重新连接
- let websocketonerror = (e) => {
- // Message({
- // message: '网络连接失败,请检查网络',
- // type: 'error',
- // })
- weboscket_callback({type:'error',msg:'网络连接失败,请检查网络'})
- // initWebSocket()
- }
- // 断开链接后报错
- let websocketclose = e => {
- if(!e.wasClean){//当网络中断时处理
- // Message({
- // message: '网络连接失败,请稍后再试',
- // type: 'error',
- // })
- weboscket_callback({type:'break',msg:'网络连接失败,请稍后再试'})
- closewebsocket();
- }
- }
- // 手动关闭 websocket
- let closewebsocket = () => {
- if(ws){
- console.log('websocket 关闭')
- ws.close()
- ws=null;
- }
- }
- let initWebSocket = (is) => {
- //初始化 websocket
- if(is){
- wsurl='wss://' + process.env.VUE_APP_WEBSCOKET + '/ws2/';
- }else{
- wsurl='wss://' + process.env.VUE_APP_WEBSCOKET + '/ws/';
- }
- ws = new WebSocket(wsurl)
- ws.onmessage = websocketonmessage
- ws.onopen = websocketonopen
- ws.onerror = websocketonerror
- ws.onclose = websocketclose
- }
- // 发送数据 is是使用ws2API 后面要清掉
- let sendData = (data, callback,is) => {
- weboscket_callback = callback
- // 判断 data 数据类型
- if (typeof data == 'string') {
- data = data
- } else {
- data = JSON.stringify(data)
- }
- if(ws){// 判断 websocket 的状态
- if (ws.readyState === ws.OPEN) {// 已经打开,可以直接发送
- ws.send(data)
- } else if (ws.readyState === ws.CONNECTING) {// 正在开启状态中,则 1 秒后重新发送
- setTimeout(() => {
- ws.send(data)
- }, 2000)
- }
- }else {
- // 未打开,则开启后重新调用
- initWebSocket(is)
- let wsData = {type: 'auth',token: getToken(),machine:generateUUID()};
- sendData(wsData, callback)
- sendData(data, callback)
- }
- }
- // 导出
- export {
- initWebSocket,
- sendData,
- closewebsocket
- }
|