backendless-rt-client
Version:
Backendless RT Client for connect to Backendless RT Server
309 lines (289 loc) • 10.7 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime/helpers/applyDecoratedDescriptor"));
var _listeners = _interopRequireDefault(require("./listeners"));
var _dec, _dec2, _dec3, _dec4, _dec5, _class, _RTScopeConnector;
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
function _superPropGet(t, o, e, r) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
var ListenerTypes = {
CONNECT: 'CONNECT',
ERROR: 'ERROR',
COMMAND: 'COMMAND',
USER_STATUS: 'USER_STATUS'
};
var RTScopeConnector = exports["default"] = (_dec = connectionRequired(), _dec2 = connectionRequired(), _dec3 = connectionRequired(), _dec4 = connectionRequired(), _dec5 = connectionRequired(true), _class = (_RTScopeConnector = /*#__PURE__*/function (_RTListeners) {
function RTScopeConnector(options) {
var _this2;
(0, _classCallCheck2["default"])(this, RTScopeConnector);
_this2 = _callSuper(this, RTScopeConnector);
_this2.options = options;
_this2.waitConnection = [];
_this2.connect();
return _this2;
}
/**
* @public method
*
* connect to connection scope, if you already connected the method do nothing
**/
(0, _inherits2["default"])(RTScopeConnector, _RTListeners);
return (0, _createClass2["default"])(RTScopeConnector, [{
key: "connectSubscriber",
get:
/**
* @abstract getter, must be overridden in an inherited class
* must returns a function for adding subscriptions to CONNECT to connection scope
* For ex.: RTProvider.subscriptions.connectToRSO
**/
function get() {
return null;
}
/**
* @abstract getter, must be overridden in an inherited class
*
* must returns a function for adding subscriptions to listening COMMANDS in connection scope
* For ex.: RTProvider.subscriptions.onRSOCommand
**/
}, {
key: "commandSubscriber",
get: function get() {
return null;
}
/**
* @abstract getter, must be overridden in an inherited class
*
* must returns a function for adding subscriptions to listening changes of USER_STATUS in connection scope
* For ex.: RTProvider.subscriptions.onRSOUserStatus
**/
}, {
key: "usersSubscriber",
get: function get() {
return null;
}
/**
* @abstract getter, must be overridden in an inherited class
*
* must returns a function for sending COMMAND into connection scope
* For ex.: RTProvider.methods.sendRSOCommand
**/
}, {
key: "commandSender",
get: function get() {
return null;
}
}, {
key: "connect",
value: function connect() {
var _this3 = this;
if (!this.isConnected()) {
this.connection = this.connectSubscriber(this.getScopeOptions(), {
onError: function onError(error) {
return _this3.onError(error);
},
onReady: function onReady() {
return _this3.onConnect();
},
onStop: function onStop() {
return _this3.onDisconnect();
}
});
}
}
/**
* @public method
*
* disconnect from connection scope, if you already disconnect the method do nothing
**/
}, {
key: "disconnect",
value: function disconnect() {
if (this.isConnected()) {
this.connection.stop();
}
}
/**
* @public method
*
* returns TRUE if you connected to connection scope otherwise returns FALSE
**/
}, {
key: "isConnected",
value: function isConnected() {
return !!this.connection && this.connection.isReady();
}
/**
* @private method
**/
}, {
key: "getSubscriptionOptions",
value: function getSubscriptionOptions() {
return this.getScopeOptions();
}
/**
* @private method
**/
}, {
key: "getScopeOptions",
value: function getScopeOptions() {
return this.options;
}
/**
* @private method
**/
}, {
key: "onConnect",
value: function onConnect() {
this.waitConnection.forEach(function (operation) {
return operation();
});
this.waitConnection = [];
this.runSimpleListeners(ListenerTypes.CONNECT);
}
/**
* @private method
**/
}, {
key: "onError",
value: function onError(error) {
this.runSimpleListeners(ListenerTypes.ERROR, error);
}
/**
* @private method
**/
}, {
key: "onDisconnect",
value: function onDisconnect() {
this.connection = null;
}
/**
* @public method
**/
}, {
key: "removeAllListeners",
value: function removeAllListeners() {
this.waitConnection = [];
_superPropGet(RTScopeConnector, "removeAllListeners", this, 3)([]);
return this;
}
/**
* @public method
**/
}, {
key: "addConnectListener",
value: function addConnectListener(callback, onError) {
this.addSimpleListener(ListenerTypes.CONNECT, callback);
if (onError) {
this.addSimpleListener(ListenerTypes.ERROR, onError);
}
return this;
}
/**
* @public method
**/
}, {
key: "removeConnectListeners",
value: function removeConnectListeners(callback, onError) {
this.removeSimpleListener(ListenerTypes.CONNECT, callback);
if (onError) {
this.removeSimpleListener(ListenerTypes.ERROR, onError);
}
return this;
}
/**
* @public method
**/
}, {
key: "addCommandListener",
value: function addCommandListener(callback, onError) {
this.addSubscription(ListenerTypes.COMMAND, this.commandSubscriber, {
callback: callback,
onError: onError
});
return this;
}
/**
* @public method
**/
}, {
key: "removeCommandListeners",
value: function removeCommandListeners(callback) {
this.stopSubscription(ListenerTypes.COMMAND, {
callback: callback
});
return this;
}
/**
* @public method
**/
}, {
key: "addUserStatusListener",
value: function addUserStatusListener(callback, onError) {
this.addSubscription(ListenerTypes.USER_STATUS, this.usersSubscriber, {
callback: callback,
onError: onError
});
return this;
}
/**
* @public method
**/
}, {
key: "removeUserStatusListeners",
value: function removeUserStatusListeners(callback) {
this.stopSubscription(ListenerTypes.USER_STATUS, {
callback: callback
});
return this;
}
/**
* @public method
**/
}, {
key: "send",
value: function send(type, data) {
return this.commandSender(_objectSpread(_objectSpread({}, this.getScopeOptions()), {}, {
type: type,
data: data
}));
}
}]);
}(_listeners["default"]), (0, _defineProperty2["default"])(_RTScopeConnector, "connectionRequired", connectionRequired), _RTScopeConnector), (0, _applyDecoratedDescriptor2["default"])(_class.prototype, "addCommandListener", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "addCommandListener"), _class.prototype), (0, _applyDecoratedDescriptor2["default"])(_class.prototype, "removeCommandListeners", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, "removeCommandListeners"), _class.prototype), (0, _applyDecoratedDescriptor2["default"])(_class.prototype, "addUserStatusListener", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, "addUserStatusListener"), _class.prototype), (0, _applyDecoratedDescriptor2["default"])(_class.prototype, "removeUserStatusListeners", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, "removeUserStatusListeners"), _class.prototype), (0, _applyDecoratedDescriptor2["default"])(_class.prototype, "send", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, "send"), _class.prototype), _class);
function connectionRequired(returnPromise) {
return function (target, key, descriptor) {
var decorated = descriptor.value;
descriptor.value = function () {
var _arguments = arguments,
_this = this;
var run = function run() {
return decorated.apply(_this, _arguments);
};
if (this.isConnected()) {
return run();
}
if (returnPromise) {
return new Promise(function (resolve, reject) {
return _this.waitConnection.push(function () {
return run().then(resolve, reject);
});
});
}
this.waitConnection.push(run);
return this;
};
return descriptor;
};
}