123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- var socketOpen = false
- var socketClose = false
- var socketMsgQueue = []
- var heart = ''
- var heartBeatFailCount = 0
- var heartBeatTimeOut = null;
- var connectSocketTimeOut = null;
- var webSocket = {
-
- connectSocket: function (options) {
- socketOpen = false
- socketClose = false
- socketMsgQueue = []
- wx.connectSocket({
- url: 'wss://xiaochengxuapi.jrjyjrjy.com/ws',
- success: function (res) {
- if (options) {
-
- options.success && options.success(res);
- }
- },
- fail: function (res) {
- if (options) {
-
- options.fail && options.fail(res);
- }
- }
- })
- },
-
- sendSocketMessage: function (options) {
- if (socketOpen) {
- wx.sendSocketMessage({
- data: options.msg,
- success: function (res) {
- if (options) {
- options.success && options.success(res);
- }
- },
- fail: function (res) {
- console.log(res);
- if (options) {
- options.fail && options.fail(res);
- }
- }
- })
- } else {
- socketMsgQueue.push(options.msg)
- }
- },
-
- closeSocket: function (options) {
- if (connectSocketTimeOut) {
- clearTimeout(connectSocketTimeOut);
- connectSocketTimeOut = null;
- }
- socketClose = true;
- var self = this;
- self.stopHeartBeat();
- wx.closeSocket({
- success: function (res) {
- console.log('WebSocket 已关闭!');
- if (options) {
- options.success && options.success(res);
- }
- },
- fail: function (res) {
- if (options) {
- options.fail && options.fail(res);
- }
- }
- })
- },
-
- onSocketMessageCallback: function (msg) {
- },
-
- startHeartBeat: function () {
- console.log('socket开始心跳')
- var self = this;
- heart = 'heart';
- self.heartBeat();
- },
-
- stopHeartBeat: function () {
- console.log('socket结束心跳')
- var self = this;
- heart = '';
- if (heartBeatTimeOut) {
- clearTimeout(heartBeatTimeOut);
- heartBeatTimeOut = null;
- }
- if (connectSocketTimeOut) {
- clearTimeout(connectSocketTimeOut);
- connectSocketTimeOut = null;
- }
- },
-
- heartBeat: function () {
- var self = this;
- if (!heart) {
- return;
- }
- self.sendSocketMessage({
- msg: JSON.stringify({
- form_id: getApp().UserId(),
- type: 'login'
- }),
- success: function (res) {
- console.log('socket心跳成功');
- if (heart) {
- heartBeatTimeOut = setTimeout(() => {
- self.heartBeat();
- }, 120000);
- }
- },
- fail: function (res) {
- console.log('socket心跳失败');
- if (heartBeatFailCount > 2) {
-
- self.connectSocket();
- }
- if (heart) {
- heartBeatTimeOut = setTimeout(() => {
- self.heartBeat();
- }, 7000);
- }
- heartBeatFailCount++;
- },
- });
- }
- }
- wx.onSocketOpen(function (res) {
- console.log('WebSocket连接已打开!')
-
-
- if (socketClose) {
- webSocket.closeSocket();
- } else {
- socketOpen = true
-
-
-
-
-
-
-
-
-
- for (var i = 0; i < socketMsgQueue.length; i++) {
- webSocket.sendSocketMessage(socketMsgQueue[i])
- }
- socketMsgQueue = []
- webSocket.startHeartBeat();
- }
- })
- wx.onSocketError(function (res) {
- console.log('WebSocket连接打开失败,请检查!', res)
- })
- wx.onSocketMessage(function (res) {
-
- webSocket.onSocketMessageCallback(res.data);
- })
- wx.onSocketClose(function (res) {
- console.log('WebSocket 已关闭!')
- if (!socketClose) {
- clearTimeout(connectSocketTimeOut)
- connectSocketTimeOut = setTimeout(() => {
- webSocket.connectSocket();
- }, 3000);
- }
- })
- module.exports = webSocket;
|