UNPKG

rb-sdk

Version:

rb client sdk

528 lines (439 loc) 23.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 _EventDispatcher = require('./EventDispatcher'); var _EventDispatcher2 = _interopRequireDefault(_EventDispatcher); var _Api = require('./Api'); var _Api2 = _interopRequireDefault(_Api); var _RBMediaRecoder = require('./RBMediaRecoder'); var _RBMediaRecoder2 = _interopRequireDefault(_RBMediaRecoder); 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 SeatRBClient = function (_RBClient) { _inherits(SeatRBClient, _RBClient); function SeatRBClient(configuration) { _classCallCheck(this, SeatRBClient); var _this2 = _possibleConstructorReturn(this, (SeatRBClient.__proto__ || Object.getPrototypeOf(SeatRBClient)).call(this, configuration)); _this2.api = new _Api2.default(configuration); _this2.loginUser = null; _this2.mediaRecoder = new _RBMediaRecoder2.default(configuration); _this2._init(); _this2._initScreenEventListener(); _this2.mediaBuffers = []; _this2.MEDIA_OPENED_STREAM = null; return _this2; } _createClass(SeatRBClient, [{ key: '_init', value: function _init() { var _this = this; _EventDispatcher2.default.addListener(_SignalType2.default.SIGNAL_REQUEST, function (event) { _RBDebugger2.default.info("Remote user connect you:", event); var singal = event.data; _this.session = singal.payload; _this.setToDevice(singal.from); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(_this, _RBEvent2.default.ACTOION_ANSWER_REQUEST, event)); }); _EventDispatcher2.default.addListener(_SignalType2.default.SIGNAL_OFFER, function (event) { _RBDebugger2.default.info("Accept remote media offer,so we will create conn and create answer:", event); var payload = event.data.payload; var offer = payload.offer; _this.webRTC.connect(); _this.webRTC.createAnswer(offer); }); _EventDispatcher2.default.addListener(_RBEvent2.default.WEBRTC_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_OFFER_ANSWER, { answer: answer }); }); _EventDispatcher2.default.addListener(_RBEvent2.default.WEBRTC_ON_LOCALE_ICECANDIDATE, function (event) { _RBDebugger2.default.info("Local icecandidate create and send that 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 candidate signal:', event); var payload = event.data.payload; _this.webRTC.addIceCandidate(payload.candidate); }); _EventDispatcher2.default.addListener(_RBEvent2.default.ACTION_ANSWER_REJECT, function (event) { try { _RBDebugger2.default.info('Reject request and the client release resource.', event); _this.restSession(); _this.closeWebRTC(); } catch (e) { _RBDebugger2.default.error('The client release resource failed.', e); } }); _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.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(_RBEvent2.default.LOCAL_SCREEN_MEDIA_OPENED, function (event) { _this.screenRTC.connect(); _this.screenRTC.createOffer(); }); _EventDispatcher2.default.addListener(_RBEvent2.default.ON_SCREEN_OFFER_CREATED, function (event) { _RBDebugger2.default.info('Local offer created and send to remote.', event); var offer = event.data; _this.sendSignal(_SignalType2.default.SIGNAL_SCREEN_OFFER, { offer: offer }); }); _EventDispatcher2.default.addListener(_SignalType2.default.SIGNAL_SCREEN_OFFER_ANSWER, function (event) { _RBDebugger2.default.info('Recived remote offer answer signal.', event); var payload = event.data.payload; _this.screenRTC.receiveAnswer(payload.answer); }); _EventDispatcher2.default.addListener(_RBEvent2.default.ON_SCREEN_ICECANDIDATE, function (event) { _RBDebugger2.default.info('Local icecandidate created and sent 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 icecandidate signal.', event); var payload = event.data.payload; _this.screenRTC.addIceCandidate(payload.candidate); }); _EventDispatcher2.default.addListener(_RBEvent2.default.ACTION_STOP_SCREEN_SHARE, function (event) { if (_this.screenRTC.getLocalStream()) { _this.sendSignal(_SignalType2.default.SIGNAL_STOP_SHARE_SCREEN, {}); _this.screenRTC.close(); } }); _EventDispatcher2.default.addListener([_RBEvent2.default.ACTION_HUNG_UP, _RBEvent2.default.ACTION_HUNG_UP_SUCCESS], function (event) { _this.screenRTC.close(); }); _EventDispatcher2.default.addListener([_RBEvent2.default.REMOTE_MEDIA_OPENED], function (event) { var trackEvent = event.data; var stream = trackEvent.stream || trackEvent.streams && trackEvent.streams[0] || trackEvent; _this.addVideoTrack(stream); _this.MEDIA_OPENED_STREAM = stream; _this.startRecord(); }); _EventDispatcher2.default.addListener([_RBEvent2.default.UPLOAD_ID_PHOTO_COMPLETE], function (event) { _this.addVideoTrack(_this.MEDIA_OPENED_STREAM); _this.startRecord(); }); _EventDispatcher2.default.addListener(_RBEvent2.default.RECORD_STREAM_PUSH, function (event) { var data = event.data; var SESSION_ID = _this.session ? _this.session.SESSION_ID : ""; if (!SESSION_ID) { _RBDebugger2.default.error('Recived record media data,but session is null', data); return; } _this.mediaBuffers.push({ session: SESSION_ID, time: data.time, chunks: data.chunks }); if (!_this.pushRecordTimer) { _this.startPushRecordTimer(); } }); _EventDispatcher2.default.addListener(_RBEvent2.default.RECORDER_STOP, function (event) { if (_this.mediaBuffers.length == 0) { return; } }); _EventDispatcher2.default.addListener(_RBEvent2.default.ACTION_HUNG_UP, function (event) { _this.stopRecord(true); }); _EventDispatcher2.default.addListener(_RBEvent2.default.UPLOAD_ID_PHOTO, function (event) { _this.stopRecord(false); }); } }, { key: 'startPushRecordTimer', value: function startPushRecordTimer() { var _this3 = this; var _this = this; if (this.pushRecordTimer) { return; } this.pushRecordTimer = window.setInterval(function () { if (_this.mediaBuffers.length < 1) { return; } var raw = _this.mediaBuffers.splice(0, 1)[0]; raw.isEnd = _this3.mediaBuffers.length < 1 && _this3.mediaRecoder.getRecodeState() === 0 ? '1' : '0'; _this.api.pushRecodMedia(raw); }, 6000); } }, { key: 'stopRecordTimer', value: function stopRecordTimer() { if (!this.pushRecordTimer) { return; } window.clearInterval(this.pushRecordTimer); } }, { key: 'startRecord', value: function startRecord() { this.mediaRecoder.start(); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_RECORDER_START, null)); } }, { key: 'addVideoTrack', value: function addVideoTrack(stream) { var localStream = this.webRTC.getLocalStream(); if (localStream) { this.mediaRecoder.addTrack(stream, localStream); } else { throw new Error('localStream or remoteStream is null '); } } }, { key: 'stopRecord', value: function stopRecord(isEnd) { this.mediaRecoder.distory(isEnd); } }, { key: 'getDeviceType', value: function getDeviceType() { return 'rbs'; } }, { key: 'reject', value: function reject() { var answerSignal = { answer: false }; this.sendSignal(_SignalType2.default.SIGNAL_ANSWER, { answer: false }); _RBDebugger2.default.info('Reject remote called:', null); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_ANSWER_REJECT, answerSignal)); } }, { key: 'answer', value: function answer(_options) { this.openLocalMedia(_options || { video: true, audio: true }); var _this = this; var answerSignal = { answer: true }; var answerTimer = setInterval(function () { if (!_this.webRTC.getLocalStream()) { return; } clearInterval(answerTimer); _this.sendSignal(_SignalType2.default.SIGNAL_ANSWER, answerSignal); _RBDebugger2.default.info('Accept remote called:', answerSignal); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(_this, _RBEvent2.default.ACTION_ANSWER_ACCEPT, answerSignal)); _this._busy(); }, 1000); } }, { key: 'supportScreenShared', value: function supportScreenShared() { return this.screenRTC.supportScreenShared(); } }, { key: 'startScreenShare', value: function startScreenShare(constrains) { this.screenRTC.openUserDisplayMedia(constrains); } }, { key: 'stopScreenShare', value: function stopScreenShare() { _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_STOP_SCREEN_SHARE, null)); } }, { key: 'getSeat', value: function getSeat() { return this.loginUser; } }, { key: '_changeSeatState', value: async function _changeSeatState(user) { var STAFF_ID = user.STAFF_ID, PROVINCE_CODE = user.PROVINCE_CODE, SEAT_STATE = user.SEAT_STATE; var DEVICE_ID = this.fromDevice; var req = { STAFF_ID: STAFF_ID, PROVINCE_CODE: PROVINCE_CODE, DEVICE_ID: DEVICE_ID, SEAT_STATE: SEAT_STATE }; var _ref = await this.api.changeSeatState(req), _ref2 = _slicedToArray(_ref, 2), err = _ref2[0], resp = _ref2[1]; return [err, resp]; } }, { key: '_busy', value: async function _busy() { var SEAT_STATE = 'SE2'; var user = this.loginUser; user = user || {}; user.SEAT_STATE = SEAT_STATE; var _ref3 = await this._changeSeatState(user), _ref4 = _slicedToArray(_ref3, 2), err = _ref4[0], resp = _ref4[1]; if (err || !resp || _Api2.default.NOMARL_RSPCODE != resp.respCode) { _RBDebugger2.default.error('Set seat busy failed,please check api status', err || resp); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_BUSY_FAILED, err || resp)); return [err, resp]; } _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_BUSY_SUCCESS, resp)); return resp; } }, { key: 'login', value: async function login(user) { var SEAT_STATE = 'SE0'; user = user || {}; user.SEAT_STATE = SEAT_STATE; var _ref5 = await this._changeSeatState(user), _ref6 = _slicedToArray(_ref5, 2), err = _ref6[0], resp = _ref6[1]; if (err || !resp || _Api2.default.NOMARL_RSPCODE != resp.respCode) { _RBDebugger2.default.error('Login failed,please check api status', err || resp); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_LOGIN_FAILED, err || resp)); return [err, resp]; } _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_LOGIN_SUCCESS, resp)); this.loginUser = resp.data; return [err, resp]; } }, { key: 'online', value: async function online() { if (!this.loginUser) { _RBDebugger2.default.error('The clien is not login.', null); throw new Error('The clien is not login.'); } var SEAT_STATE = 'SE1'; var user = this.loginUser; user.SEAT_STATE = SEAT_STATE; var _ref7 = await this._changeSeatState(user), _ref8 = _slicedToArray(_ref7, 2), err = _ref8[0], resp = _ref8[1]; if (err || !resp || _Api2.default.NOMARL_RSPCODE != resp.respCode) { _RBDebugger2.default.error('Online failed,please check api status', err || resp); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_ONLINE_FAILED, err || resp)); return; } this.connect(); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_ONLINE_SUCCESS, resp)); return [err, resp]; } }, { key: 'offline', value: async function offline() { if (!this.loginUser) { _RBDebugger2.default.error('The clien is not login.', null); throw new Error('The clien is not login.'); } var SEAT_STATE = 'SE3'; var user = this.loginUser; user.SEAT_STATE = SEAT_STATE; var _ref9 = await this._changeSeatState(user), _ref10 = _slicedToArray(_ref9, 2), err = _ref10[0], resp = _ref10[1]; if (err || !resp || _Api2.default.NOMARL_RSPCODE != resp.respCode) { _RBDebugger2.default.error('Offline failed,please check api status', err || resp); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_OFFLINE_FAILED, err || resp)); return; } _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_OFFLINE_SUCCESS, resp)); return [err, resp]; } }, { key: 'logout', value: async function logout() { var SEAT_STATE = 'SE4'; if (!this.loginUser) { _RBDebugger2.default.error('The clien is not login.', null); throw new Error('The clien is not login.'); } var user = this.loginUser; user.SEAT_STATE = SEAT_STATE; var _ref11 = await this._changeSeatState(user), _ref12 = _slicedToArray(_ref11, 2), err = _ref12[0], resp = _ref12[1]; if (err || !resp || _Api2.default.NOMARL_RSPCODE != resp.respCode) { _RBDebugger2.default.error('Logout failed,please check api status', err || resp); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_LOGOUT_FAILED, err || resp)); return; } _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_LOGOUT_SUCCESS, resp)); return [err, resp]; } }, { key: 'hungUp', value: async function hungUp() { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var SEAT_STATE = 'SC4'; var SEAT_ID = this.loginUser.SEAT_ID; var SESSION_ID = this.session ? this.session.SESSION_ID : ""; var DEVICE_ID = this.fromDevice; var HUNG_UP_OPER = params.HUNG_UP_OPER || ""; var req = { SESSION_ID: SESSION_ID, SEAT_ID: SEAT_ID, SEAT_STATE: SEAT_STATE, DEVICE_ID: DEVICE_ID, HUNG_UP_OPER: HUNG_UP_OPER }; _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_HUNG_UP, req)); var _ref13 = await this.api.hungUp(req), _ref14 = _slicedToArray(_ref13, 2), error = _ref14[0], resp = _ref14[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.closeWebRTC(); this.stopScreenShare(); _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_HUNG_UP_SUCCESS, resp)); return [error, resp]; } }, { key: 'handelQueningUser', value: async function handelQueningUser() { var user = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var req = {}; if (null != this.loginUser) { var SEAT_ID = this.loginUser.SEAT_ID; req = { SEAT_ID: SEAT_ID }; } var _ref15 = await this.api.handelQueningUser(req), _ref16 = _slicedToArray(_ref15, 2), error = _ref16[0], resp = _ref16[1]; if (error || !resp || _Api2.default.NOMARL_RSPCODE != resp.respCode) { _RBDebugger2.default.error('front disconnect failed:', error || resp); return [error, resp]; } return [null, resp]; } }, { key: 'stopRecorder', value: async function stopRecorder() { _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.UPLOAD_ID_PHOTO, null)); } }, { key: 'restartRecorder', value: async function restartRecorder() { _EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.UPLOAD_ID_PHOTO_COMPLETE, null)); } }]); return SeatRBClient; }(_RBClient3.default); exports.default = SeatRBClient;