/// /// /// AndroidClient = function () { var ServerUrl = ""; var websocket = null; //创建WebSocket对象 var SequenceID = 1; var ListMessage = new Array(); var PrevTime = new Date(); var OutTime = 60; //心跳时间秒 var TimeHappenNumer = 3; //心跳可失败次数 var DeviceNo = ""; var EventHandler = new Sys.EventHandlerList(); //#region 启动监听 this.Start = function (Port, DevNo) { DeviceNo = DevNo; //ServerUrl = "ws://" + $.url.attr("host") + ":" + Port; ServerUrl = "ws://192.168.1.157:" + Port; SocketAccept(); OnStart(); } //#endregion //#region 连接 function SocketAccept() { if (window.WebSocket) { } else { //$("#txtInput").val("不支持websocket"); try { Android.StartWebSocket(ServerUrl, DeviceNo); } catch (e) { } return; } websocket = new ReconnectingWebSocket(ServerUrl, null, { debug: true, reconnectInterval: 5000 });; //创建WebSocket对象 websocket.debug = true; websocket.timeoutInterval = 5400; websocket.onopen = function (evt) { //连接完成,发送登录消息 //$("#txtInput").val("连接成功"); //alert("连接成功"); SequenceID++; if (SequenceID >= 9500) SequenceID = 1; var SequenceID2 = PadLeft(SequenceID, 4); var data = "FunNo=0001^DeviceNo=" + DeviceNo + "^SequenceID=" + SequenceID2; websocket.send(data); }; websocket.onclose = function () { //$("#txtInput").val("连接失败"); //alert("连接关闭"); } websocket.onmessage = function (evt) { //收到服务器消息,使用evt.data提取 //alert(evt.data); this.PrevTime = new Date(); TreatMessage(evt.data); }; } //#ednregion //#region 发送心跳 function OutTimeHappen() { //var model = new Object(); //model.SequenceID = this.SequenceID; //model.Data = "FunNo=0004^SequenceID=" + this.SequenceID; //model.SendTime = new Date().addHours(-1); //ListMessage.push(model); //if (TimeHappenNumer <= 0) //{ // TimeHappenNumer = 3; // websocket.clone(); // //连接关闭,30秒后重连 // window.setTimeout(SocketAccept, 30000); // return; //} PrevTime = new Date(); SequenceID++; if (SequenceID >= 9500) SequenceID = 1; var SequenceID2 = PadLeft(SequenceID, 4); var data = "FunNo=0004^SequenceID=" + SequenceID2; websocket.send(data); TimeHappenNumer--; } //#endregion //#region 循环发送信息 function OnStart() { if (websocket == null) return; if (websocket.readyState != 1) { window.setTimeout(OnStart, 2000); return; } var cDate = new Date(); if (addSeconds(PrevTime, OutTime) < cDate) { //如果超时未收发消息,那么发送必跳 OutTimeHappen(); window.setTimeout(OnStart, 1000); return; } if (ListMessage.length == 0) { window.setTimeout(OnStart, 1000); return; } var model = ListMessage[0]; if (model.SendTime.addSeconds(5) > cDate) { window.setTimeout(OnStart, 1000); return; } model.SendTime = cDate; websocket.send(model.Data); window.setTimeout(OnStart, 1000); } //#endregion //#region 复制日期 function cloneDate(cDate) { var dt = new Date(); dt.setFullYear(cDate.getFullYear()); dt.setMonth(cDate.getMonth()); dt.setDate(cDate.getDate()); dt.setHours(cDate.getHours()); dt.setMinutes(cDate.getMinutes()); dt.setSeconds(cDate.getSeconds()); dt.setMilliseconds(cDate.getMilliseconds()); return dt; } //#endregion //#region 增加秒 function addSeconds(dt, s) { var dt2 = cloneDate(dt); dt2.setSeconds(dt2.getSeconds() + s); return dt2; } //#endregion //#region 补位0 function PadLeft(num, n) { return (Array(n).join(0) + num).slice(-n); } //#endregion //#region 回复消息 function SendByte(FunNo, SequenceID2, Data) { var data = "FunNo=" + FunNo + "^SequenceID=" + SequenceID2 + Data; websocket.send(data); } //#endregion //#region 处理消息 function TreatMessage(msg) { var model = ParseData(msg); //从Global.js处得到的共享方法 switch (model.FunNo) { case "0004": //心跳请求回复 TimeHappenNumer++; break; default: SendByte(model.FunNo, model.SequenceID, ""); OnChangeState(model); break; } } //#endregion //#region 状态改变时触发 this.ChangeState = function (handler) { EventHandler.addHandler('ChangeState', handler); } //#endregion //#region 点击状态改变时触发 function OnChangeState(model) { var h = EventHandler.getHandler('ChangeState'); if (h) h(model); } //#endregion }