rb-sdk
Version:
rb client sdk
528 lines (439 loc) • 23.4 kB
JavaScript
'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;