|
@@ -23,9 +23,9 @@ var encryptId = null;
|
|
|
var qr_type = "s";
|
|
|
var unseatflag = false;//未登录情况下,用户点击超级搜索等开启按钮或者功能,根据此状态看是否弹出二维码
|
|
|
var unseatzbqyflag = false;//未登录情况下,用户点击中标企业等开启按钮或者功能,根据此状态看是否弹出二维码
|
|
|
-var sendMsgIntervalObj = null;
|
|
|
+var sendMsgInterval = null;
|
|
|
//心跳检测
|
|
|
-var WebSocketHeartCheck = function(){
|
|
|
+var WebSocketHeartCheck = function(scoketType){
|
|
|
this.lockReconnect = false;//避免重复连接
|
|
|
this.timeout = 5000;//60秒
|
|
|
this.timeoutObj = null;
|
|
@@ -35,80 +35,132 @@ var WebSocketHeartCheck = function(){
|
|
|
clearTimeout(this.serverTimeoutObj);
|
|
|
return this;
|
|
|
}
|
|
|
- this.start = function(){
|
|
|
- if(loginflag){
|
|
|
+ this.start = function(w,f){
|
|
|
+ if(f){
|
|
|
return;
|
|
|
}
|
|
|
var self = this;
|
|
|
this.timeoutObj = setTimeout(function(){
|
|
|
//这里发送一个心跳,后端收到后,返回一个心跳消息,
|
|
|
//onmessage拿到返回的心跳就说明连接正常
|
|
|
- if(ws.readyState==1){
|
|
|
- ws.send("HeartBeat");
|
|
|
+ if(w.readyState==1){
|
|
|
+ w.send("HeartBeat");
|
|
|
}
|
|
|
self.serverTimeoutObj = setTimeout(function(){//如果超过一定时间还没重置,说明后端主动断开了
|
|
|
- ws.close();//如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
|
|
|
+ //用自己的超时,如果用w.colse()执行之后,大概要一分钟才会执行webscoket自己的close方法,时间太长
|
|
|
+ //进行ajax轮询
|
|
|
+ if(scoketType=="login"){
|
|
|
+ LoginPolling.isPostLoginPolling = true;
|
|
|
+ }else if(scoketType=="qrToLab"){
|
|
|
+ QrToLabPolling.isPostLoginPolling = true;
|
|
|
+ }
|
|
|
+ w.close();//如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
|
|
|
}, self.timeout);
|
|
|
}, this.timeout);
|
|
|
}
|
|
|
}
|
|
|
-var webSocketHeartCheck = new WebSocketHeartCheck();
|
|
|
+//轮询查询
|
|
|
+var LoginPolling = {
|
|
|
+ isPostLoginPolling: false,//是否发起轮询请求
|
|
|
+ loginPollingInterval: null,
|
|
|
+ initInterval: null,
|
|
|
+ init: function(){
|
|
|
+ //防止重复调用
|
|
|
+ if(this.initInterval != null){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //先发一个消息,保存session
|
|
|
+ this.postShareid();
|
|
|
+ this.initInterval = setInterval(this.postShareid,3000);
|
|
|
+ },
|
|
|
+ postShareid: function(){
|
|
|
+ $.post("/front/ajaxPolling",{reqType: 1,shareIds: pageshareid+"___"+kopshareid},function(r){
|
|
|
+ clearInterval(LoginPolling.initInterval);
|
|
|
+ LoginPolling.initInterval = null;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ start: function(){
|
|
|
+ //防止重复调用
|
|
|
+ if(this.loginPollingInterval != null){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //定时器,定时请求看是否扫码登录,返回用户信息,登录
|
|
|
+ this.loginPollingInterval = setInterval(function(){
|
|
|
+ //如果浏览器不支持webscoket,走ajax轮询方式
|
|
|
+ if(window.WebSocket == undefined) {
|
|
|
+ LoginPolling.isPostLoginPolling = true;
|
|
|
+ }
|
|
|
+ if(!LoginPolling.isPostLoginPolling){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ $.post("/front/ajaxPolling",{reqType:2},function(r){
|
|
|
+ if(!jQuery.isEmptyObject(r)){
|
|
|
+ logic(r,mynum);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },5000);
|
|
|
+ },
|
|
|
+ stop: function(){
|
|
|
+ clearInterval(this.loginPollingInterval);
|
|
|
+ this.loginPollingInterval = null;
|
|
|
+ this.isPostLoginPolling = false;
|
|
|
+ }
|
|
|
+}
|
|
|
+var webSocketHeartCheck = new WebSocketHeartCheck("login");
|
|
|
//创建websocket连接
|
|
|
-var createWebSocket = function(wsUrl){
|
|
|
+var createWebSocket = function(flag){
|
|
|
try{
|
|
|
ws = new WebSocket(wsUrl);//实例化websocket对象
|
|
|
- initEventHandle();
|
|
|
+ initEventHandle(flag);
|
|
|
}catch(e){
|
|
|
- reconnect(wsUrl)
|
|
|
+ reconnect();
|
|
|
console.log(e)
|
|
|
}
|
|
|
}
|
|
|
//
|
|
|
-var initEventHandle = function(){
|
|
|
+var initEventHandle = function(flag){
|
|
|
ws.onmessage = function(e){
|
|
|
+ //接收消息正常,就不再发ajax轮询
|
|
|
+ LoginPolling.isPostLoginPolling = false;
|
|
|
if(e.data==""){
|
|
|
return
|
|
|
- }else if(e.data=="ok"){//重新发送shareid
|
|
|
- clearInterval(sendMsgIntervalObj);
|
|
|
- sendMsgIntervalObj = null;
|
|
|
- return
|
|
|
}else if(e.data=="HeartBeat"){//心跳检测
|
|
|
//如果获取到消息,心跳检测重置
|
|
|
//拿到任何消息都说明当前连接是正常的
|
|
|
- webSocketHeartCheck.reset().start();
|
|
|
+ webSocketHeartCheck.reset().start(ws,loginflag);
|
|
|
return;
|
|
|
}
|
|
|
//用户登录
|
|
|
- logic(e.data,mynum);
|
|
|
+ logic($.parseJSON(e.data),mynum);
|
|
|
}
|
|
|
ws.onerror = function(e){
|
|
|
//console.info("onerror");
|
|
|
- reconnect(wsUrl);
|
|
|
+ reconnect();
|
|
|
}
|
|
|
- ws.onclose = function () {
|
|
|
+ ws.onclose = function(e) {
|
|
|
//console.info("onclose");
|
|
|
- reconnect(wsUrl);
|
|
|
+ reconnect();
|
|
|
}
|
|
|
ws.onopen = function(e) {
|
|
|
+ if(flag){//重连之后发送shareid
|
|
|
+ SendMsg();
|
|
|
+ }
|
|
|
//心跳检测重置
|
|
|
- webSocketHeartCheck.reset().start();
|
|
|
+ webSocketHeartCheck.reset().start(ws,loginflag);
|
|
|
}
|
|
|
}
|
|
|
//
|
|
|
-function reconnect(url) {
|
|
|
+function reconnect() {
|
|
|
if(webSocketHeartCheck.lockReconnect || loginflag){
|
|
|
return;
|
|
|
}
|
|
|
+ LoginPolling.isPostLoginPolling = true;
|
|
|
webSocketHeartCheck.lockReconnect = true;
|
|
|
+ LoginPolling.init();
|
|
|
//没连接上会一直重连,设置延迟避免请求过多
|
|
|
setTimeout(function () {
|
|
|
- createWebSocket(url);
|
|
|
+ createWebSocket(true);
|
|
|
webSocketHeartCheck.lockReconnect = false;
|
|
|
- if(sendMsgIntervalObj == null){
|
|
|
- sendMsgIntervalObj = setInterval(function(){
|
|
|
- SendMsg();
|
|
|
- },2000);
|
|
|
- }
|
|
|
}, 2000);
|
|
|
}
|
|
|
//websocket查看用户是否登录
|
|
@@ -122,15 +174,20 @@ var JYLogin = function(num){
|
|
|
jylgi = 0;
|
|
|
}
|
|
|
},1000)
|
|
|
+ LoginPolling.init();
|
|
|
SendMsg();
|
|
|
}
|
|
|
var SendMsg = function(){
|
|
|
//向后台发送websocket数据
|
|
|
if (window["WebSocket"]){
|
|
|
if(ws.readyState==1){
|
|
|
- console.log("发送:"+pageshareid+"___"+kopshareid)
|
|
|
+ //console.log("发送:"+pageshareid+"___"+kopshareid)
|
|
|
ws.send(pageshareid+"___"+kopshareid);
|
|
|
+ }else{
|
|
|
+ LoginPolling.isPostLoginPolling = true;
|
|
|
}
|
|
|
+ }else{
|
|
|
+ LoginPolling.isPostLoginPolling = true;
|
|
|
}
|
|
|
}
|
|
|
//生成页面二维码,不同页面处理逻辑
|
|
@@ -242,8 +299,7 @@ var redisUserInfo = function(pid,kid){
|
|
|
}
|
|
|
|
|
|
//查询用户信息,响应页面登录信息
|
|
|
-var logic = function(infoData,num){
|
|
|
- var data = $.parseJSON(infoData);
|
|
|
+var logic = function(data,num){
|
|
|
if(data.result=="ok"){
|
|
|
//$(".QRLogin").hide();
|
|
|
$("#bidLogin").modal("hide")
|
|
@@ -251,6 +307,8 @@ var logic = function(infoData,num){
|
|
|
clearInterval(loginfg);
|
|
|
loginflag = true;
|
|
|
processpage(data.shareid,num);
|
|
|
+ //登录成功,停止轮询
|
|
|
+ LoginPolling.stop();
|
|
|
//登录成功,停止心跳监测
|
|
|
webSocketHeartCheck.reset();
|
|
|
if(ws.readyState==1){
|
|
@@ -484,7 +542,8 @@ var saveuserlogs = function(shareid){
|
|
|
var signout = function(){
|
|
|
clearInterval(loginfg);
|
|
|
kzyflag = true;
|
|
|
- createWebSocket(wsUrl);
|
|
|
+ LoginPolling.start();
|
|
|
+ createWebSocket(false);
|
|
|
getNewShareId(mynum);
|
|
|
loginflag = false;
|
|
|
unseatflag = false;
|
|
@@ -499,50 +558,51 @@ var signout = function(){
|
|
|
|
|
|
//查看用户是否已经登录
|
|
|
var haslogin = function(num,kyorpn,url){
|
|
|
-mynum = num;//页面logid
|
|
|
-keysorpname = kyorpn;//其他参数
|
|
|
-thurl = url;//列表也跳转快照页url
|
|
|
-$.post("/front/hasSign",function(data, location){
|
|
|
- if(data){
|
|
|
- loginflag = true;
|
|
|
- encryptId = data.encryptId
|
|
|
- if(data.s_nickname.length>6){
|
|
|
- data.s_nickname = data.s_nickname.substring(0,6);
|
|
|
- data.s_nickname = data.s_nickname + "...";
|
|
|
- }
|
|
|
- var hhtml = "<img class='imgShow' onmouseover='openStyle()' onmouseout='closeStyle()' "
|
|
|
- if(data.redisheadimg!=""){
|
|
|
- hhtml+="src='"+data.redisheadimg+"'"
|
|
|
- }else{
|
|
|
- hhtml+="src='"+data.s_headimage+"'"
|
|
|
- }
|
|
|
- hhtml+=" onerror='this.src=\"/images/defaultAvatar.png\"'>"
|
|
|
- +"<div class='userInfo'>"
|
|
|
- +"<div class='infoList' style='display:none'>"
|
|
|
- +"<span class='one'></span>"
|
|
|
- +"<span class='two'></span>"
|
|
|
- +"<div class='usernameDiv'>"
|
|
|
- +data.s_nickname
|
|
|
- +"</div>"
|
|
|
- +"<div class='exitDiv' onclick='signout()'>"
|
|
|
- +"<img id='outImg' src='/images/userexit.png'/>"
|
|
|
- +"<span>退出</span>"
|
|
|
+ mynum = num;//页面logid
|
|
|
+ keysorpname = kyorpn;//其他参数
|
|
|
+ thurl = url;//列表也跳转快照页url
|
|
|
+ $.post("/front/hasSign",function(data, location){
|
|
|
+ if(data){
|
|
|
+ loginflag = true;
|
|
|
+ encryptId = data.encryptId
|
|
|
+ if(data.s_nickname.length>6){
|
|
|
+ data.s_nickname = data.s_nickname.substring(0,6);
|
|
|
+ data.s_nickname = data.s_nickname + "...";
|
|
|
+ }
|
|
|
+ var hhtml = "<img class='imgShow' onmouseover='openStyle()' onmouseout='closeStyle()' "
|
|
|
+ if(data.redisheadimg!=""){
|
|
|
+ hhtml+="src='"+data.redisheadimg+"'"
|
|
|
+ }else{
|
|
|
+ hhtml+="src='"+data.s_headimage+"'"
|
|
|
+ }
|
|
|
+ hhtml+=" onerror='this.src=\"/images/defaultAvatar.png\"'>"
|
|
|
+ +"<div class='userInfo'>"
|
|
|
+ +"<div class='infoList' style='display:none'>"
|
|
|
+ +"<span class='one'></span>"
|
|
|
+ +"<span class='two'></span>"
|
|
|
+ +"<div class='usernameDiv'>"
|
|
|
+ +data.s_nickname
|
|
|
+ +"</div>"
|
|
|
+ +"<div class='exitDiv' onclick='signout()'>"
|
|
|
+ +"<img id='outImg' src='/images/userexit.png'/>"
|
|
|
+ +"<span>退出</span>"
|
|
|
+ +"</div>"
|
|
|
+"</div>"
|
|
|
- +"</div>"
|
|
|
- +"</div>"
|
|
|
- $("#login").html(hhtml);
|
|
|
- infoListCss();
|
|
|
- commonMouseEvent();
|
|
|
- getNewShareId(num);
|
|
|
- getlabstatus();
|
|
|
- changeER();
|
|
|
- }else{
|
|
|
- $("#login").html("<button class='loginBtn' data-toggle='modal' data-target='#bidLogin' style='width:65px; height:30px; padding-left:18px;border-radius:4px; line-height:0px; color:#666666; border: solid 1px #000; border-color:#CCCCCC;' onmouseover='this.style.borderColor=\"#2cb7ca\"; this.style.color=\"#2cb7ca\";' onmouseout='this.style.borderColor=\"#CCCCCC\"; this.style.color=\"#666666\";'>登录</button>");
|
|
|
- getNewShareId(num);
|
|
|
- createWebSocket(wsUrl);
|
|
|
- getlabstatus();
|
|
|
- kzyflag = true;//未登录进入快照页面
|
|
|
- changeER();
|
|
|
+ +"</div>"
|
|
|
+ $("#login").html(hhtml);
|
|
|
+ infoListCss();
|
|
|
+ commonMouseEvent();
|
|
|
+ getNewShareId(num);
|
|
|
+ getlabstatus();
|
|
|
+ changeER();
|
|
|
+ }else{
|
|
|
+ $("#login").html("<button class='loginBtn' data-toggle='modal' data-target='#bidLogin' style='width:65px; height:30px; padding-left:18px;border-radius:4px; line-height:0px; color:#666666; border: solid 1px #000; border-color:#CCCCCC;' onmouseover='this.style.borderColor=\"#2cb7ca\"; this.style.color=\"#2cb7ca\";' onmouseout='this.style.borderColor=\"#CCCCCC\"; this.style.color=\"#666666\";'>登录</button>");
|
|
|
+ getNewShareId(num);
|
|
|
+ LoginPolling.start();
|
|
|
+ createWebSocket(false);
|
|
|
+ getlabstatus();
|
|
|
+ kzyflag = true;//未登录进入快照页面
|
|
|
+ changeER();
|
|
|
}
|
|
|
})
|
|
|
}
|