UNPKG

rb-sdk

Version:

rb client sdk

444 lines (351 loc) 19.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _RBClient2 = require("./RBClient"); var _RBClient3 = _interopRequireDefault(_RBClient2); var _RBEvent = require("./RBEvent"); var _RBEvent2 = _interopRequireDefault(_RBEvent); var _SignalType = require("./SignalType"); var _SignalType2 = _interopRequireDefault(_SignalType); var _RBDebugger = require("./RBDebugger"); var _RBDebugger2 = _interopRequireDefault(_RBDebugger); var _store = require("store"); var _store2 = _interopRequireDefault(_store); var _Api = require("./Api"); var _Api2 = _interopRequireDefault(_Api); var _EventDispatcher = require("./EventDispatcher"); var _EventDispatcher2 = _interopRequireDefault(_EventDispatcher); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var ToCRBClient = function (_RBClient) { _inherits(ToCRBClient, _RBClient); function ToCRBClient(configuration) { _classCallCheck(this, ToCRBClient); var _this2 = _possibleConstructorReturn(this, (ToCRBClient.__proto__ || Object.getPrototypeOf(ToCRBClient)).call(this, configuration)); _this2.api = new _Api2.default(configuration); _this2.seat = null; _this2.isOffer = false; _this2._init(); _this2._initScreenEventListener(); return _this2; } _createClass(ToCRBClient, [{ key: "_init", value: function _init() { var _this = this; _EventDispatcher2.default.addListener(_RBEvent2.default.SCHDULE_SUCCESS, function (event) { var data = event.data; _RBDebugger2.default.info('Event SCHDULE_SUCCESS will set session', data); var SESSION_ID = data.SESSION_ID, SEAT_DEVICE_ID = data.SEAT_DEVICE_ID, SEAT_ID = data.SEAT_ID, STAFF_ID = data.STAFF_ID, PROVINCE_CODE = data.PROVINCE_CODE; _this.session = _this.newSession(SESSION_ID); _this.setToDevice(SEAT_DEVICE_ID || null); _this.seat = { SEAT_ID: SEAT_ID, STAFF_ID: STAFF_ID, PROVINCE_CODE: PROVINCE_CODE }; _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(_this, _RBEvent2.default.SESSION_INIT, data)); }); _EventDispatcher2.default.addListener(_RBEvent2.default.SESSION_INIT, function (event) { _RBDebugger2.default.info('Event SESSION_INIT,add ext props to session', event); var data = event.data; var CREATE_TIME = data.CREATE_TIME; _this.addSession('createTime', CREATE_TIME); _this.addSession('extProps', _this.configuration.getExtProps()); _this.addSession('fromDeviceMeta', _this.configuration.getDeviceMeta()); }); _EventDispatcher2.default.addListener(_RBEvent2.default.SCHDULE_FAILED, function (event) { _this.closeWs(); }); _EventDispatcher2.default.addListener(_SignalType2.default.SIGNAL_ANSWER, function (event) { _RBDebugger2.default.info('Recived remote answer signal...', event); var payload = event.data.payload; if (!payload.answer) { _RBDebugger2.default.info('Remote reject answer ', event.data); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(_this, _SignalType2.default.SIGNAL_REJECT, event)); return; } _this.webRTC.createOffer(); }); _EventDispatcher2.default.addListener(_RBEvent2.default.WEBRTC_LOCAL_OFFER_CREATED, function (event) { _RBDebugger2.default.info('Local offer created and send to remote.', event); var offer = event.data; _this.sendSignal(_SignalType2.default.SIGNAL_OFFER, { offer: offer }); }); _EventDispatcher2.default.addListener(_SignalType2.default.SIGNAL_OFFER_ANSWER, function (event) { _RBDebugger2.default.info('Recived remote offer answer signal.', event); var payload = event.data.payload; _this.webRTC.receiveAnswer(payload.answer); }); _EventDispatcher2.default.addListener(_RBEvent2.default.WEBRTC_ON_LOCALE_ICECANDIDATE, function (event) { _RBDebugger2.default.info('Local icecandidate created and sent to remote.', event); var e = event.data; _this.sendSignal(_SignalType2.default.SIGNAL_ICECANDIDATE, { candidate: e.candidate }); }); _EventDispatcher2.default.addListener(_SignalType2.default.SIGNAL_ICECANDIDATE, function (event) { _RBDebugger2.default.info('Recived remote icecandidate signal.', event); var payload = event.data.payload; _this.webRTC.addIceCandidate(payload.candidate); }); _EventDispatcher2.default.addListener(_SignalType2.default.SIGNAL_HUNG_UP, function (event) { try { _RBDebugger2.default.info('Recived remote hungup signal and the client release resource.', event); _this.restSession(); _this.closeWebRTC(); } catch (e) { _RBDebugger2.default.error('The client release resource failed.', e); } _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(_this, _RBEvent2.default.ACTION_HUNG_UP, event.data)); }); } }, { key: "_initScreenEventListener", value: function _initScreenEventListener() { var _this = this; _EventDispatcher2.default.addListener(_SignalType2.default.SIGNAL_SCREEN_OFFER, function (event) { _RBDebugger2.default.info("Accept remote screen offer,so we will create conn and create answer:", event); var payload = event.data.payload; var offer = payload.offer; _this.screenRTC.connect(); _this.screenRTC.createAnswer(offer); }); _EventDispatcher2.default.addListener(_RBEvent2.default.ON_SCREEN_ANSWER_CREATED, function (event) { _RBDebugger2.default.info("Offer answer created and send that to remote:", event); var answer = event.data; _this.sendSignal(_SignalType2.default.SIGNAL_SCREEN_OFFER_ANSWER, { answer: answer }); }); _EventDispatcher2.default.addListener(_RBEvent2.default.ON_SCREEN_ICECANDIDATE, function (event) { _RBDebugger2.default.info("Local icecandidate create and send that to remote:", event); var e = event.data; _this.sendSignal(_SignalType2.default.SIGNAL_SCREEN_ICECANDIDATE, { candidate: e.candidate }); }); _EventDispatcher2.default.addListener(_SignalType2.default.SIGNAL_SCREEN_ICECANDIDATE, function (event) { _RBDebugger2.default.info('Recived remote candidate signal:', event); var payload = event.data.payload; _this.webRTC.addIceCandidate(payload.candidate); }); } }, { key: "getDeviceType", value: function getDeviceType() { return 'rbc'; } }, { key: "reCall", value: async function reCall() { var user = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _options = arguments[1]; var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var _this = this; var sessionId = _store2.default.get("rb-ssid") || null; var req = { extProps: this.configuration.getExtProps(), USER_ID: user.userId, SESSION_ID: sessionId, DEVICE: { DEVICE_ID: this.fromDevice, BROWSER_AGENT: JSON.stringify(this.browser), IMEI: '' } }; req = Object.assign(req, params); var _ref = await this.api.schedule(req), _ref2 = _slicedToArray(_ref, 2), err = _ref2[0], resp = _ref2[1]; if (err || !resp || _Api2.default.NOMARL_RSPCODE != resp.respCode) { _RBDebugger2.default.error('Schedule failed,may be network error or no free seat resource', err || resp); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.SCHDULE_FAILED, err || resp)); return; } _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(_this, _RBEvent2.default.SCHDULE_SUCCESS, resp.data)); this.openLocalMedia(_options || null); var callTimer = setInterval(function () { if (!_this.webRTC.getLocalStream()) { return; } clearInterval(callTimer); _this.sendSignal(_SignalType2.default.SIGNAL_REQUEST, _this.session); _this.webRTC.connect(); }, 500); return resp; } }, { key: "_getUser", value: function _getUser() { var user = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _user = user, userId = _user.userId; if (userId) { user.userId = userId; _store2.default.set("rb-user", user); return user; } if (!userId) { user = _store2.default.get("rb-user"); if (!user || !user['userId']) { var _userId = _store2.default.get('_rbdid'); user = { userId: _userId }; _store2.default.set("rb-user", user); } } return user; } }, { key: "call", value: async function call() { var user = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _options = arguments[1]; var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; _store2.default.set("rb-ssid", ''); user = this._getUser(user); this.connect(); var _this = this; var checkCount = 0; var connectChecker = setInterval(function () { checkCount++; if (checkCount > 3) { clearInterval(connectChecker); _this.closeWs(); _RBDebugger2.default.error("Check [" + checkCount + "] times and infer Network error.", null); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(_this, _RBEvent2.default.NETWORK_ERROR_CALL_FAILED, null)); return; } if (1 === _this.socketState) { _this.reCall(user, _options, params); clearInterval(connectChecker); } }, 1000); } }, { key: "cancleCall", value: async function cancleCall() { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; try { this.closeWebRTC(); } catch (e) { _RBDebugger2.default.error('Error close webrtc:', e); } var SEAT_STATE = 'SC4'; var SEAT_ID = this.seat.SEAT_ID; var SESSION_ID = this.session.SESSION_ID; var SEAT_DEVICE_ID = this.getToDevice(); var req = { SESSION_ID: SESSION_ID, SEAT_ID: SEAT_ID, SEAT_STATE: SEAT_STATE, SEAT_DEVICE_ID: SEAT_DEVICE_ID }; req = Object.assign(req, params); var _ref3 = await this.api.hungUp(req), _ref4 = _slicedToArray(_ref3, 2), error = _ref4[0], resp = _ref4[1]; if (error || !resp || _Api2.default.NOMARL_RSPCODE != resp.respCode) { _RBDebugger2.default.error('Hung up failed:', error || resp); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_HUNG_UP_FAILED, error || resp)); return [error, resp]; } if (this.session) { this.sendSignal(_SignalType2.default.SIGNAL_HUNG_UP); } this.restSession(); this.closeWs(); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_HUNG_UP_SUCCESS, resp)); return [error, resp]; } }, { key: "joinQueue", value: async function joinQueue() { var user = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; user = this._getUser(user); var req = { USER_ID: user.userId }; req = Object.assign(req, params); var _ref5 = await this.api.joinQueue(req), _ref6 = _slicedToArray(_ref5, 2), error = _ref6[0], resp = _ref6[1]; if (error || !resp || _Api2.default.NOMARL_RSPCODE != resp.respCode) { _RBDebugger2.default.error('Join queue failed:', error || resp); return [error, resp]; } _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.GET_QUEUE_STATE, resp)); return [null, resp]; } }, { key: "exitQueue", value: async function exitQueue() { var user = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; user = this._getUser(user); var req = { USER_ID: user.userId }; req = Object.assign(req, params); var _ref7 = await this.api.exitQueue(req), _ref8 = _slicedToArray(_ref7, 2), error = _ref8[0], resp = _ref8[1]; if (error || !resp || _Api2.default.NOMARL_RSPCODE != resp.respCode) { _RBDebugger2.default.error('Exit queue failed:', error || resp); return [error, resp]; } return resp; } }, { key: "getQueueRemind", value: async function getQueueRemind() { var user = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var req = {}; if (!params.total) { user = this._getUser(user); req = { USER_ID: user.userId }; } req = Object.assign(req, params); var _ref9 = await this.api.getQueueRemind(req), _ref10 = _slicedToArray(_ref9, 2), error = _ref10[0], resp = _ref10[1]; if (error || !resp || _Api2.default.NOMARL_RSPCODE != resp.respCode) { _RBDebugger2.default.error('Get queue state failed:', error || resp); return [error, resp]; } _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.GET_QUEUE_STATE, resp)); return [null, resp]; } }, { key: "frontDisconnect", value: async function frontDisconnect() { var user = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var req = {}; if (null != this.seat && null != this.session) { var SEAT_ID = this.seat.SEAT_ID; var SESSION_ID = this.session.SESSION_ID; req.SEAT_ID = SEAT_ID; req.SESSION_ID = SESSION_ID; } req.SEAT_DEVICE_ID = this.getToDevice(); req.USER_ID = this._getUser(user); req = Object.assign(req, params); var _ref11 = await this.api.frontDisconnect(req), _ref12 = _slicedToArray(_ref11, 2), error = _ref12[0], resp = _ref12[1]; if (error || !resp || _Api2.default.NOMARL_RSPCODE != resp.respCode) { _RBDebugger2.default.error('front disconnect failed:', error || resp); return [error, resp]; } _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.GET_QUEUE_STATE, resp)); return [null, resp]; } }]); return ToCRBClient; }(_RBClient3.default); exports.default = ToCRBClient;