|
@@ -1,5 +1,4 @@
|
|
|
/**统一登录js文件**/
|
|
|
-
|
|
|
var loginfg='';//websocket请求标识
|
|
|
var bIE9=false;
|
|
|
if(navigator.appName == "Microsoft Internet Explorer" && navigator.appVersion.match(/[6789]./i)) {
|
|
@@ -24,43 +23,89 @@ var encryptId = null;
|
|
|
var qr_type = "s";
|
|
|
var unseatflag = false;//未登录情况下,用户点击超级搜索等开启按钮或者功能,根据此状态看是否弹出二维码
|
|
|
var unseatzbqyflag = false;//未登录情况下,用户点击中标企业等开启按钮或者功能,根据此状态看是否弹出二维码
|
|
|
-var errnum = 0;
|
|
|
+var sendMsgIntervalObj = null;
|
|
|
+//心跳检测
|
|
|
+var WebSocketHeartCheck = function(){
|
|
|
+ this.lockReconnect = false;//避免重复连接
|
|
|
+ this.timeout = 5000;//60秒
|
|
|
+ this.timeoutObj = null;
|
|
|
+ this.serverTimeoutObj = null;
|
|
|
+ this.reset = function(){
|
|
|
+ console.info("reset。。。");
|
|
|
+ clearTimeout(this.timeoutObj);
|
|
|
+ clearTimeout(this.serverTimeoutObj);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ this.start = function(){
|
|
|
+ var self = this;
|
|
|
+ this.timeoutObj = setTimeout(function(){
|
|
|
+ //这里发送一个心跳,后端收到后,返回一个心跳消息,
|
|
|
+ //onmessage拿到返回的心跳就说明连接正常
|
|
|
+ console.info("send HeartBeat");
|
|
|
+ ws.send("HeartBeat");
|
|
|
+ self.serverTimeoutObj = setTimeout(function(){//如果超过一定时间还没重置,说明后端主动断开了
|
|
|
+ ws.close();//如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
|
|
|
+ }, self.timeout);
|
|
|
+ }, this.timeout);
|
|
|
+ }
|
|
|
+}
|
|
|
+var webSocketHeartCheck = new WebSocketHeartCheck();
|
|
|
//创建websocket连接
|
|
|
var createWebSocket = function(wsUrl){
|
|
|
try{
|
|
|
ws = new WebSocket(wsUrl);//实例化websocket对象
|
|
|
initEventHandle();
|
|
|
}catch(e){
|
|
|
- //reconnect(wsUrl)
|
|
|
+ reconnect(wsUrl)
|
|
|
console.log(e)
|
|
|
}
|
|
|
}
|
|
|
//
|
|
|
var initEventHandle = function(){
|
|
|
ws.onmessage = function(e){
|
|
|
- if(e.data!=""){
|
|
|
- //用户登录
|
|
|
- logic(e.data,mynum);
|
|
|
+ console.info(e.data);
|
|
|
+ console.info("recive。。。");
|
|
|
+ if(e.data==""){
|
|
|
+ return
|
|
|
+ }else if(e.data=="\"ok\""){//重新发送shareid
|
|
|
+ clearInterval(sendMsgIntervalObj);
|
|
|
+ console.info(sendMsgIntervalObj)
|
|
|
+ return
|
|
|
+ }else if(e.data=="\"HeartBeat\""){//心跳检测
|
|
|
+ //如果获取到消息,心跳检测重置
|
|
|
+ //拿到任何消息都说明当前连接是正常的
|
|
|
+ webSocketHeartCheck.reset().start();
|
|
|
}
|
|
|
+ //用户登录
|
|
|
+ logic(e.data,mynum);
|
|
|
}
|
|
|
ws.onerror = function(e){
|
|
|
- errnum++
|
|
|
- if(errnum<5){
|
|
|
- clearInterval(loginfg);
|
|
|
- createWebSocket(wsUrl);
|
|
|
- JYLogin(mynum);
|
|
|
- }
|
|
|
+ console.info("onerror");
|
|
|
+ reconnect(wsUrl);
|
|
|
+ }
|
|
|
+ ws.onclose = function () {
|
|
|
+ console.info("onclose");
|
|
|
+ reconnect(wsUrl);
|
|
|
+ }
|
|
|
+ ws.onopen = function(e) {
|
|
|
+ //心跳检测重置
|
|
|
+ webSocketHeartCheck.reset().start();
|
|
|
}
|
|
|
-// ws.onopen = function(e) {
|
|
|
-// if(ws.readyState==1){
|
|
|
-// ws.send(pageshareid+"___"+kopshareid);
|
|
|
-// }
|
|
|
-// }
|
|
|
}
|
|
|
//
|
|
|
function reconnect(url) {
|
|
|
+ if(webSocketHeartCheck.lockReconnect) return;
|
|
|
+ webSocketHeartCheck.lockReconnect = true;
|
|
|
+ //没连接上会一直重连,设置延迟避免请求过多
|
|
|
setTimeout(function () {
|
|
|
+ console.info("reconnect。。。");
|
|
|
createWebSocket(url);
|
|
|
+ webSocketHeartCheck.lockReconnect = false;
|
|
|
+ if(sendMsgIntervalObj == null){
|
|
|
+ sendMsgIntervalObj = setInterval(function(){
|
|
|
+ SendMsg();
|
|
|
+ },2000);
|
|
|
+ }
|
|
|
}, 2000);
|
|
|
}
|
|
|
//websocket查看用户是否登录
|
|
@@ -78,14 +123,16 @@ var JYLogin = function(num){
|
|
|
}
|
|
|
var SendMsg = function(){
|
|
|
//向后台发送websocket数据
|
|
|
+ console.info("-------------000000000");
|
|
|
if (window["WebSocket"]){
|
|
|
+ console.info("-------------11111111");
|
|
|
+ console.info(ws.readyState);
|
|
|
if(ws.readyState==1){
|
|
|
- //console.log("发送:"+pageshareid+"___"+kopshareid)
|
|
|
+ console.log("发送:"+pageshareid+"___"+kopshareid)
|
|
|
ws.send(pageshareid+"___"+kopshareid);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
//生成页面二维码,不同页面处理逻辑
|
|
|
var getNewShareId = function(num){
|
|
|
mynum = num;
|