UNPKG

@bddh/starling-realtime-client

Version:

2 lines (1 loc) 10.8 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _rollupPluginBabelHelpers=require("./_virtual/_rollupPluginBabelHelpers.js"),uuid=require("uuid"),createWebSocket=require("@bddh/starling-web-socket/es/create-web-socket"),_interface$1=require("@bddh/starling-web-socket/es/interface"),pick=require("lodash/pick"),omit=require("lodash/omit"),get=require("lodash/get"),_interface=require("./interface.js"),Server=function(_sendMessage){function Server(url,options){var _ref,_this=this;_rollupPluginBabelHelpers.classCallCheck(this,Server),_rollupPluginBabelHelpers.defineProperty(this,"dhServerSocket",null),_rollupPluginBabelHelpers.defineProperty(this,"preConnectSuccess",!1),_rollupPluginBabelHelpers.defineProperty(this,"connectParams",null),_rollupPluginBabelHelpers.defineProperty(this,"socketClosingPromise",null),_rollupPluginBabelHelpers.defineProperty(this,"url",void 0),_rollupPluginBabelHelpers.defineProperty(this,"firstConnect",!0),_rollupPluginBabelHelpers.defineProperty(this,"connectingTimer",null),_rollupPluginBabelHelpers.defineProperty(this,"connectingMs",3e4),_rollupPluginBabelHelpers.defineProperty(this,"lastPreOpen",!1),_rollupPluginBabelHelpers.defineProperty(this,"reconnectingTimeout",!1),_rollupPluginBabelHelpers.defineProperty(this,"lastReportedReadyState",-1),_rollupPluginBabelHelpers.defineProperty(this,"lastHbAckTs",0),_rollupPluginBabelHelpers.defineProperty(this,"checkHeartbeatMismatch",void 0),_rollupPluginBabelHelpers.defineProperty(this,"emitRawStatusMessage",void 0),_rollupPluginBabelHelpers.defineProperty(this,"sendPreConnect",(function(props,resolve){var _this$dhServerSocket,token=props.token,sessionId=props.sessionId,onConnect=props.onConnect;null===(_this$dhServerSocket=_this.dhServerSocket)||void 0===_this$dhServerSocket||_this$dhServerSocket.request({action:"RE_CONNECT",requestId:uuid.v4(),body:JSON.stringify({token:token,sessionId:sessionId})}).on((function(res,off){null==onConnect||onConnect(res),0!==res.code&&(off(),_this.handleConnect()),null==resolve||resolve(_this.dhServerSocket)})),_this.firstConnect=!1})),_rollupPluginBabelHelpers.defineProperty(this,"createSocket",(function(_x,_x2){return(_ref=_ref||_rollupPluginBabelHelpers.asyncToGenerator(_rollupPluginBabelHelpers.regeneratorRuntime().mark((function _callee(props,isPreOpenSession){var sessionId,onDigitalHumanCallback;return _rollupPluginBabelHelpers.regeneratorRuntime().wrap((function(_context){for(;;)switch(_context.prev=_context.next){case 0:if(_this.connectParams=props,_this.lastPreOpen=!!isPreOpenSession,sessionId=props.sessionId,onDigitalHumanCallback=props.onDigitalHumanCallback,!_this.socketClosingPromise){_context.next=6;break}return _context.next=6,_this.socketClosingPromise;case 6:if(!_this.dhServerSocket||_this.dhServerSocket.readyState===_interface$1.ReadyState.CLOSED){_context.next=9;break}return _context.next=9,_this.closeSocket();case 9:return _context.abrupt("return",new Promise((function(resolve,reject){var settled=!1,onceResolve=function(value){settled||(settled=!0,resolve(value))},createPamrams={keepAlive:"heartbeat",checkHeartbeatMismatch:_this.checkHeartbeatMismatch,reopen:get(_this.connectParams,"reConnect",!0),getKeepAliveMessage:function(requestId){return{requestId:requestId,action:"HEART_BEAT",body:"".concat(_this.lastHbAckTs),clientTs:Date.now()}},combine:function(req,res){return req&&res&&req.requestId===res.requestId},onOpen:function(){_this.dhServerSocket=socket,onceResolve(_this.dhServerSocket),sessionId&&_this.firstConnect?_this.sendPreConnect(props,onceResolve):isPreOpenSession&&_this.firstConnect||_this.handleConnect()},onClose:function(){_this.socketClosingPromise=null,onceResolve(null)},onError:function(error){reject(error)}},socket=createWebSocket.createWebSocket(_this.url,createPamrams);socket.onReadyStateChange((function(readyState){_this.lastReportedReadyState=readyState,0===readyState?(_this.startConnectingWatch(),onDigitalHumanCallback&&onDigitalHumanCallback({status:_interface.statusEnum.DH_LIB_INIT})):(_this.clearConnectingWatch(),_this.reconnectingTimeout=!1),1===readyState&&isPreOpenSession&&(_this.preConnectSuccess=!0),3===readyState&&(_this.preConnectSuccess=!1),onDigitalHumanCallback&&onDigitalHumanCallback({status:_interface.statusEnum.DH_LIB_FULL_STATUS,content:{type:"wsState",readyState:readyState,body:_interface.WS_STATUS_MAP[readyState]}})})),socket.onMessage((function(msgData){var action=msgData.action;"HEART_BEAT"===action&&(_this.lastHbAckTs=Date.now()),[_interface.errorTypeEnum.TIMEOUT_EXIT,_interface.errorTypeEnum.DISCONNECT_ALERT].includes(action)&&(onDigitalHumanCallback&&onDigitalHumanCallback({status:_interface.statusEnum.DH_LIB_STATUS,content:{type:action}}),_this.emitRawStatusMessage&&onDigitalHumanCallback&&onDigitalHumanCallback({status:_interface.statusEnum.DH_LIB_MESSAGE,content:msgData})),[_interface.errorTypeEnum.TIMEOUT_EXIT,_interface.errorTypeEnum.DISCONNECT_ALERT,"HEART_BEAT","CONNECT"].includes(action)||onDigitalHumanCallback&&onDigitalHumanCallback({status:_interface.statusEnum.DH_LIB_MESSAGE,content:msgData})})),_this.dhServerSocket=socket,socket.open()})));case 10:case"end":return _context.stop()}}),_callee)})))).apply(this,arguments)})),_rollupPluginBabelHelpers.defineProperty(this,"sendConnect",(function(props){_this.connectParams=props,_this.dhServerSocket&&_this.handleConnect()})),_rollupPluginBabelHelpers.defineProperty(this,"closeSocket",_rollupPluginBabelHelpers.asyncToGenerator(_rollupPluginBabelHelpers.regeneratorRuntime().mark((function _callee2(){return _rollupPluginBabelHelpers.regeneratorRuntime().wrap((function(_context2){for(;;)switch(_context2.prev=_context2.next){case 0:if(_this.resetState(),_this.dhServerSocket){_context2.next=3;break}return _context2.abrupt("return");case 3:return _this.socketClosingPromise=_this.dhServerSocket.close(),_context2.next=6,_this.socketClosingPromise;case 6:_this.dhServerSocket=null;case 7:case"end":return _context2.stop()}}),_callee2)})))),_rollupPluginBabelHelpers.defineProperty(this,"destroySocket",_rollupPluginBabelHelpers.asyncToGenerator(_rollupPluginBabelHelpers.regeneratorRuntime().mark((function _callee3(){var _this$dhServerSocket2;return _rollupPluginBabelHelpers.regeneratorRuntime().wrap((function(_context3){for(;;)switch(_context3.prev=_context3.next){case 0:_this.resetState(),_this.connectParams=null,null===(_this$dhServerSocket2=_this.dhServerSocket)||void 0===_this$dhServerSocket2||_this$dhServerSocket2.destroy(),_this.dhServerSocket=null;case 4:case"end":return _context3.stop()}}),_callee3)})))),_rollupPluginBabelHelpers.defineProperty(this,"handleConnect",_rollupPluginBabelHelpers.asyncToGenerator(_rollupPluginBabelHelpers.regeneratorRuntime().mark((function _callee4(){var _this$connectParams,appId,appKey,token,parameters,onConnect;return _rollupPluginBabelHelpers.regeneratorRuntime().wrap((function(_context4){for(;;)switch(_context4.prev=_context4.next){case 0:if(_this.dhServerSocket&&_this.connectParams){_context4.next=2;break}return _context4.abrupt("return");case 2:if(_this$connectParams=_this.connectParams,appId=_this$connectParams.appId,appKey=_this$connectParams.appKey,token=_this$connectParams.token,parameters=_this$connectParams.parameters,onConnect=_this$connectParams.onConnect,appId||appKey||token){_context4.next=5;break}return _context4.abrupt("return");case 5:_this.dhServerSocket&&_this.dhServerSocket.request({action:"CONNECT",clientTs:(new Date).getTime(),requestId:uuid.v4(),body:JSON.stringify(_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({token:token,appId:appId,appKey:appKey},pick(_this.connectParams,_interface.CONNECT_MAIN_KEY)),{},{parameters:_rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({},omit(parameters,["parameters"])),parameters&&parameters.parameters?parameters.parameters:{})}))}).on((function(res,off){null==onConnect||onConnect(res),0!==res.code&&off()}));case 6:case"end":return _context4.stop()}}),_callee4)}))));var _ref5=options||{},checkHeartbeatMismatch=_ref5.checkHeartbeatMismatch,_ref5$emitRawStatusMe=_ref5.emitRawStatusMessage,emitRawStatusMessage=void 0!==_ref5$emitRawStatusMe&&_ref5$emitRawStatusMe;this.url=url,this.checkHeartbeatMismatch=null!=checkHeartbeatMismatch&&checkHeartbeatMismatch,this.emitRawStatusMessage=emitRawStatusMessage}return _rollupPluginBabelHelpers.createClass(Server,[{key:"setEmitRawStatusMessage",value:function(value){this.emitRawStatusMessage=value}},{key:"sendMessage",value:function(_x3,_x4){return(_sendMessage=_sendMessage||_rollupPluginBabelHelpers.asyncToGenerator(_rollupPluginBabelHelpers.regeneratorRuntime().mark((function _callee5(message,listener){var requestId;return _rollupPluginBabelHelpers.regeneratorRuntime().wrap((function(_context5){for(;;)switch(_context5.prev=_context5.next){case 0:try{this.dhServerSocket&&this.dhServerSocket&&this.dhServerSocket.request(message).on((function(response){listener&&listener(response)}))}catch(e){requestId="object"===_rollupPluginBabelHelpers.typeof(message)&&"requestId"in message?message.requestId:uuid.v4(),listener&&listener({code:-11,body:null,action:"RENDER_ERROR",requestId:requestId,message:JSON.stringify(e)})}case 1:case"end":return _context5.stop()}}),_callee5,this)})))).apply(this,arguments)}},{key:"startConnectingWatch",value:function(){var _this2=this;this.connectingTimer||this.reconnectingTimeout||(this.connectingTimer=setTimeout(_rollupPluginBabelHelpers.asyncToGenerator(_rollupPluginBabelHelpers.regeneratorRuntime().mark((function _callee6(){return _rollupPluginBabelHelpers.regeneratorRuntime().wrap((function(_context6){for(;;)switch(_context6.prev=_context6.next){case 0:if(_this2.connectingTimer=null,_this2.dhServerSocket&&0===_this2.lastReportedReadyState){_context6.next=3;break}return _context6.abrupt("return");case 3:if(console.warn("reconnect from CONNECTING timeout"),_this2.reconnectingTimeout=!0,_context6.prev=5,!_this2.connectParams){_context6.next=9;break}return _context6.next=9,_this2.createSocket(_this2.connectParams,_this2.lastPreOpen);case 9:_context6.next=14;break;case 11:_context6.prev=11,_context6.t0=_context6.catch(5),console.error("reconnect from CONNECTING timeout failed",_context6.t0);case 14:return _context6.prev=14,_this2.reconnectingTimeout=!1,_context6.finish(14);case 17:case"end":return _context6.stop()}}),_callee6,null,[[5,11,14,17]])}))),this.connectingMs))}},{key:"clearConnectingWatch",value:function(){this.connectingTimer&&(clearTimeout(this.connectingTimer),this.connectingTimer=null)}},{key:"resetState",value:function(){this.clearConnectingWatch(),this.reconnectingTimeout=!1,this.lastReportedReadyState=-1,this.lastHbAckTs=0}}]),Server}();exports.CONNECTING_STUCK_MS_DEFAULT=3e4,exports.default=Server;