You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 line
5.4 KiB
JavaScript
1 line
5.4 KiB
JavaScript
|
2 years ago
|
"use strict";function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function t(t,e){for(var n=0;n<e.length;n++){var s=e[n];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(t,s.key,s)}}return function(e,n,s){return n&&t(e.prototype,n),s&&t(e,s),e}}();!function(){function t(t){for(var e=document.cookie,n=e.split("; "),s=0;s<n.length;s++){var i=n[s].split("=");if(i[0]==t)return i[1]}return""}var e=function(){function e(n){_classCallCheck(this,e),void 0,this.messageHandle=n.messageHandle,this.UserName=t("UserName")||"",this.deviceId=t("uuid_tt_dd")||"default",this.appId=n.appid||"CSDN-PC",this.chatSocket=null,this.wsConnectStatus=0,this.testMsg=null,this.wsUrl=null,this.lockReconnect=!1,this.tt=null,this.timeout=5e3,this.timeoutObj=null,this.serverTimeoutObj=null,this.connectInfo=null,this.isReallClose=!1,this.getIMtoken()}return _createClass(e,[{key:"getIMtoken",value:function(){var t=this.UserName||"",e="";if(!t)return void void 0;var n=this;t||$.ajax({headers:{"Content-Type":"application/json","X-Device-ID":this.deviceId,"X-App-ID":this.appId},type:"post",url:"https://passport.csdn.net/v1/api/app/create/fkUser",crossDomain:!0,xhrFields:{withCredentials:!0},success:function(s){if(s.data){t=s.data.id,e=s.data.token;var i={appId:n.appId,userId:t||"",token:e||"",linkType:1,deviceId:n.deviceId,groupId:"CSDN-private-MSG"};n.connectInfo=i,n.webSocketConnect()}},error:function(n){t="",e=""}});var s={appId:this.appId,userId:t||"",token:e||"",linkType:1,deviceId:this.deviceId,groupId:"CSDN-private-MSG",channelType:"privateMsg",appFrom:1};this.connectInfo=s,this.webSocketConnect()}},{key:"webSocketConnect",value:function(){var t=this,e=this.connectInfo;$.ajax({headers:{"Content-Type":"application/json"},type:"post",url:"https://bizapi.csdn.net/im-manage/v1.0/dispatch/do",data:JSON.stringify(e),crossDomain:!0,xhrFields:{withCredentials:!0},success:function(n){if(n.data){t.wsUrl="wss://"+n.data.linkServers[0],t.testMsg=JSON.stringify({ver:"1.0",cmdId:2,isZip:0,body:{userId:e.userId,appId:e.appId,imToken:n.data.imToken,groupId:e.groupId}});try{t.chatSocket=new WebSocket(t.wsUrl),t.webSocketInit()}catch(e){t.webSocketReconnect()}}},error:function(e){void 0,t.webSocketReconnect()}})}},{key:"webSocketReconnect",value:function(){var t=this;void 0,this.isReallClose||this.wsConnectStatus>0||this.lockReconnect||(this.lockReconnect=!0,this.tt&&clearTimeout(this.tt),this.tt=setTimeout(function(){t.webSocketConnect(),t.lockReconnect=!1},3e3))}},{key:"webSocketInit",value:function(t){var e=this;this.wsConnectStatus=1,this.chatSocket.onopen=function(t){e.wsConnectStatus=2,e.chatSocket.send(e.testMsg)},this.chatSocket.onmessage=function(t){e.wsConnectStatus=2,e.onMessage(t.data),e.heartCheck()},this.chatSocket.onerror=function(t){void 0,e.onMessage({cmdId:-1,msg:"ws 连接失败"}),e.wsConnectStatus=-1,e.isReallClose||e.webSocketReconnect()},this.chatSocket.onclose=function(t){void 0,e.onMessage({msg:"ws 连接关闭"}),e.wsConnectStatus=-1,void 0,e.isReallClose||e.webSocketReconnect()};var n=this;window.onbeforeunload=function(){try{n.closeWebsocket()}catch(t){void 0}}}},{key:"onMessage",value:function(t){var e="string"==typeof t?JSON.parse(t):t;5==+e.cmdId&&2===this.wsConnectStatus&&(this.wsConnectStatus=3),"function"==typeof this.messageHandle&&this.messageHandle(e)}},{key:"closeWebsocket",value:function(t){this.chatSocket.close(),t&&(this.isReallClose=!0),this.wsConnectStatus=0,void 0}},{key:"heartbeat",value:function(){var t=this;3===this.wsConnectStatus&&(this.chatSocket.send('{"cmdId":1}'),setTimeout(function(){t.heartbeat()},3e4))}},{key:"heartCheck",value:function(){var t=this;this.timeoutObj&&clearTimeout(this.timeoutObj),this.serverTimeoutObj&&clearTimeout(this.serverTimeoutObj),this.timeoutObj=setTimeout(function(){t.chatSocket.send('{"cmdId":1}'),t.serverTimeoutObj=setTimeout(function(){void 0,t.chatSocket.close()},t.timeout)},this.timeout)}},{key:"sendMessage",value:function(t,e){return t||e?this.UserName
|