|
|
|
@ -1,38 +1,20 @@ |
|
|
|
let wsurl = ""; |
|
|
|
let accessToken = ""; |
|
|
|
let messageCallBack = null; |
|
|
|
let openCallBack = null; |
|
|
|
let messageCallBack = null; |
|
|
|
let closeCallBack = null; |
|
|
|
let isConnect = false; //连接标识 避免重复连接
|
|
|
|
let hasLogin = false; |
|
|
|
let hasInit = false; |
|
|
|
let createWebSocket = (url, token) => { |
|
|
|
|
|
|
|
let init = (url, token) => { |
|
|
|
wsurl = url; |
|
|
|
accessToken = token; |
|
|
|
closeWebSocket().then(() => { |
|
|
|
initWebSocket(); |
|
|
|
}); |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
let initWebSocket = () => { |
|
|
|
console.log("初始化WebSocket"); |
|
|
|
uni.connectSocket({ |
|
|
|
url: wsurl, |
|
|
|
success: (res) => { |
|
|
|
console.log("websocket连接成功"); |
|
|
|
}, |
|
|
|
fail: (err) => { |
|
|
|
console.log(e); |
|
|
|
console.log("websocket连接失败"); |
|
|
|
reConnect(); //如果无法连接上webSocket 那么重新连接!可能会因为服务器重新部署,或者短暂断网等导致无法创建连接
|
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
// 不能绑定多次事件,不然多触发,即便之前已经调了uni.closeSocket
|
|
|
|
// 防止重新注册事件
|
|
|
|
if(hasInit){ |
|
|
|
return; |
|
|
|
} |
|
|
|
hasInit = true; |
|
|
|
|
|
|
|
uni.onSocketOpen((res) => { |
|
|
|
console.log("WebSocket连接已打开"); |
|
|
|
isConnect = true; |
|
|
|
@ -48,11 +30,9 @@ let initWebSocket = () => { |
|
|
|
}); |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
uni.onSocketMessage((res) => { |
|
|
|
let sendInfo = JSON.parse(res.data) |
|
|
|
if (sendInfo.cmd == 0) { |
|
|
|
hasLogin = true; |
|
|
|
heartCheck.start() |
|
|
|
console.log('WebSocket登录成功') |
|
|
|
// 登录成功才算连接完成
|
|
|
|
@ -71,53 +51,54 @@ let initWebSocket = () => { |
|
|
|
console.log(res) |
|
|
|
console.log('WebSocket连接关闭') |
|
|
|
isConnect = false; //断开后修改标识
|
|
|
|
//reConnect();
|
|
|
|
closeCallBack && closeCallBack(res); |
|
|
|
}) |
|
|
|
|
|
|
|
uni.onSocketError((err) => { |
|
|
|
console.log(err) |
|
|
|
uni.onSocketError((e) => { |
|
|
|
console.log(e) |
|
|
|
isConnect = false; //连接断开修改标识
|
|
|
|
uni.showModal({ |
|
|
|
content: '连接失败,可能是websocket服务不可用,请稍后再试', |
|
|
|
showCancel: false, |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
//定义重连函数
|
|
|
|
let reConnect = () => { |
|
|
|
console.log("尝试重新连接"); |
|
|
|
if (isConnect) return; //如果已经连上就不在重连了
|
|
|
|
rec && clearTimeout(rec); |
|
|
|
rec = setTimeout(function() { // 延迟5秒重连 避免过多次过频繁请求重连
|
|
|
|
initWebSocket(); |
|
|
|
}, 5000); |
|
|
|
}; |
|
|
|
let connect = ()=>{ |
|
|
|
if (isConnect) { |
|
|
|
return; |
|
|
|
} |
|
|
|
uni.connectSocket({ |
|
|
|
url: wsurl, |
|
|
|
success: (res) => { |
|
|
|
console.log("websocket连接成功"); |
|
|
|
}, |
|
|
|
fail: (e) => { |
|
|
|
console.log(e); |
|
|
|
console.log("websocket连接失败,10s后重连"); |
|
|
|
setTimeout(()=>{ |
|
|
|
connect(); |
|
|
|
},10000) |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//设置关闭连接
|
|
|
|
let closeWebSocket = () => { |
|
|
|
return new Promise((resolve, reject) => { |
|
|
|
let close = () => { |
|
|
|
if (!isConnect) { |
|
|
|
resolve(); |
|
|
|
return; |
|
|
|
} |
|
|
|
uni.closeSocket({ |
|
|
|
code: 3000, |
|
|
|
complete: (res) => { |
|
|
|
console.log("关闭websocket连接"); |
|
|
|
hasLogin = false; |
|
|
|
isConnect = false; |
|
|
|
resolve(); |
|
|
|
}, |
|
|
|
fail:(e)=>{ |
|
|
|
console.log("关闭websocket连接失败",e); |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
@ -157,24 +138,26 @@ function sendMessage(agentData) { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function onmessage(callback) { |
|
|
|
function onMessage(callback) { |
|
|
|
messageCallBack = callback; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function onopen(callback) { |
|
|
|
function onOpen(callback) { |
|
|
|
openCallBack = callback; |
|
|
|
if (hasLogin) { |
|
|
|
openCallBack(); |
|
|
|
} |
|
|
|
|
|
|
|
function onClose(callback) { |
|
|
|
closeCallBack = callback; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 将方法暴露出去
|
|
|
|
export { |
|
|
|
createWebSocket, |
|
|
|
closeWebSocket, |
|
|
|
init, |
|
|
|
connect, |
|
|
|
close, |
|
|
|
sendMessage, |
|
|
|
onmessage, |
|
|
|
onopen |
|
|
|
onMessage, |
|
|
|
onOpen, |
|
|
|
onClose |
|
|
|
} |