|
|
/// <reference path="../Scripts/MicrosoftAjax.js" />
|
|
|
/// <reference path="reconnecting-websocket.min.js" />
|
|
|
/// <reference path="../Scripts/jquery.min.js" />
|
|
|
|
|
|
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
|
|
|
|
|
|
}
|
|
|
|
|
|
|