var MYWS = null; var stompClient = null; var WSReconnectNum = 0; var WSReconnectNumMax = 500; var WSReconnectT = null; var MSGDiv = "div_mqttstate"; var WSSubscribe = "/exchange/exchanges_push_cz/rk_pushmsg"; //服务器的地址 var WS_OBJ = {}; var WSheaders = {}; var WSConnectFlag = false; function startWebSocket(_wsuri, _user, _password) { WSConnectFlag = false; WS_OBJ = {uri: _wsuri, user: _user, password: _password}; // 首先判断是否 支持 WebSocket if ('WebSocket' in window) { // MYWS = new WebSocket(WS_OBJ.uri); MYWS = new ReconnectingWebSocket(WS_OBJ.uri); } else if ('MozWebSocket' in window) { MYWS = new MozWebSocket(WS_OBJ.uri); } else { MYWS = new SockJS(WS_OBJ.uri); } stompClient = Stomp.over(MYWS); stompClient.heartbeat.outgoing=10000;//若使用stomp1.1,默认开启心跳,这里设置心跳间隔为20秒 stompClient.heartbeat.incoming=10000;//客户端不从服务端接收心跳包 WSheaders = { login: _user, passcode: _password, "host": "/gt", // additional header 'client-id': 'MC_' + getRandomDate() }; stompClient.connect(WSheaders, on_connect, on_error); } function on_connect(e) { var date = new Date(); //console.log("connected to " + WS_OBJ.uri+"开始时间:"+getTimeStrfomart(date)); WSConnectFlag = true; setWSState(); if (WSReconnectT != null) { clearInterval(WSReconnectT); WSReconnectT == null } stompClient.subscribe(WSSubscribe, onMessageArrived, onMsgFailed); // try { // setTimeout(function () { // $("#div_main")[0].contentWindow.showMsg("", "成功连接消息服务器");//成功连接消息服务器 20210910 消息服务器断开后也能重新 不会在断开不连了 所以前端页面上不需要显示 暂时注释掉 // }, 2000); // } catch (e) { // } } function on_error(e) { var date = new Date(); //console.log("error:" + e+" 报错时间:"+getTimeStrfomart(date)); // try { // setTimeout(function () { // $("#div_main")[0].contentWindow.showMsgwebsoket("", "error_icon", "bg-dot");//error_icon 消息服务器断开 断开用图片显示 // }, 1000); // } catch (e) { // } //重连 WSConnectFlag = false; setWSState(); if (WSReconnectT == null) { WSReconnectT = setInterval(function () { startWebSocket(WS_OBJ.uri, WS_OBJ.user, WS_OBJ.password); }, 10000); } } function getTimeStrfomart(_dateObj, _showSend) { let _timeStr = ""; try { if (_dateObj != null) { var month = _dateObj.getMonth() + 1 < 10 ? "0" + (_dateObj.getMonth() + 1) : _dateObj.getMonth() + 1; var date = _dateObj.getDate() < 10 ? "0" + _dateObj.getDate() : _dateObj.getDate(); _timeStr += (" " + _dateObj.getFullYear() + "-" + month + "-" +date + " "); _timeStr += (pad(_dateObj.getHours(), 2) + ":" + pad(_dateObj.getMinutes(), 2) + ":" + pad(_dateObj.getSeconds(), 2)); } } catch (e) { } return _timeStr; } function reConnectWS() { if (WSReconnectNumMax >= WSReconnectNum) { WSReconnectNum++; sock = new WebSocket(WS_OBJ.uri); } } //消息接收 function onMessageArrived(message) { var date = new Date(); //console.log("onMessageArrived ----"+"消息接收开始时间:"+getTimeStrfomart(date)); try { //console.log("message:" + message); MessageToFrame(JSON.parse(decodeURIComponent(message.body))); } catch (e) { console.log("error:" + e); } } function onMsgFailed() { console.log("error:" + e); } function send(_topic, _header, _msg) { var msg = document.getElementById('message').value; stompClient.send(_topic, _header, _msg); } function setWSState() { $("#" + MSGDiv).removeClass("text-main icon-paw text-dot icon-frown-o"); if (WSConnectFlag) { $("#" + MSGDiv).addClass("text-main icon-paw"); $("#" + MSGDiv).attr("title", "已上线"); } else { $("#" + MSGDiv).addClass("text-dot icon-frown-o"); $("#" + MSGDiv).attr("title", "未连接服务器"); } } function MessageToFrame(_msg) { var date = new Date(); try { if (_msg.mqType == 4) { let _cctvParas = { ip: "192.168.2.64", port: 80, username: "admin", password: "Gt123456", arg: 53 } startCCTVAuto(_cctvParas); } else { $("#div_main")[0].contentWindow.showMQMsg(_msg);//菜单左侧围栏报警通知接收 //console.log("MessageToFrame ------"+"目标消息接收开始时间:"+getTimeStrfomart(date)); //console.log("MessageToFrame ------"+"目标消息接收数据:"+JSON.stringify(_msg.data)); $("#div_main")[0].contentWindow.onMQTTmessage(_msg);//目标消息接收 //console.log("目标消息接收:" + JSON.stringify(_msg)); } } catch (e) { } }