backendless-rt-client
Version:
Backendless RT Client for connect to Backendless RT Server
236 lines (235 loc) • 9.8 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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _constants = require("./constants");
var _utils = _interopRequireDefault(require("./utils"));
var subscription = function subscription(type) {
return function (options, callbacks) {
return this.subscribe(type, options, callbacks);
};
};
var RTSubscriptions = exports["default"] = /*#__PURE__*/function () {
function RTSubscriptions(_ref) {
var onMessage = _ref.onMessage,
emitMessage = _ref.emitMessage;
(0, _classCallCheck2["default"])(this, RTSubscriptions);
/******************************************************************************* **/
/******************************************************************************* **/
/** COMMON SUBSCRIPTIONS ******************************************************** **/
/***************************************** **/
/***** DATA SUBSCRIPTIONS **************** **/
/** */
(0, _defineProperty2["default"])(this, "onObjectsChanges", subscription(_constants.RTSubscriptionTypes.OBJECTS_CHANGES).bind(this));
/** */
(0, _defineProperty2["default"])(this, "onRelationsChanges", subscription(_constants.RTSubscriptionTypes.RELATIONS_CHANGES).bind(this));
/***** DATA SUBSCRIPTIONS **************** **/
/***************************************** **/
/***************************************** **/
/***** PUB_SUB SUBSCRIPTIONS ************* **/
/** */
(0, _defineProperty2["default"])(this, "connectToPubSub", subscription(_constants.RTSubscriptionTypes.PUB_SUB_CONNECT).bind(this));
/** */
(0, _defineProperty2["default"])(this, "onPubSubMessage", subscription(_constants.RTSubscriptionTypes.PUB_SUB_MESSAGES).bind(this));
/** */
(0, _defineProperty2["default"])(this, "onPubSubCommand", subscription(_constants.RTSubscriptionTypes.PUB_SUB_COMMANDS).bind(this));
/** */
(0, _defineProperty2["default"])(this, "onPubSubUserStatus", subscription(_constants.RTSubscriptionTypes.PUB_SUB_USERS).bind(this));
/***** PUB_SUB SUBSCRIPTIONS ************* **/
/***************************************** **/
/***************************************** **/
/***** RSO SUBSCRIPTIONS ***************** **/
/** */
(0, _defineProperty2["default"])(this, "connectToRSO", subscription(_constants.RTSubscriptionTypes.RSO_CONNECT).bind(this));
/** */
(0, _defineProperty2["default"])(this, "onRSOChanges", subscription(_constants.RTSubscriptionTypes.RSO_CHANGES).bind(this));
/** */
(0, _defineProperty2["default"])(this, "onRSOClear", subscription(_constants.RTSubscriptionTypes.RSO_CLEARED).bind(this));
/** */
(0, _defineProperty2["default"])(this, "onRSOCommand", subscription(_constants.RTSubscriptionTypes.RSO_COMMANDS).bind(this));
/** */
(0, _defineProperty2["default"])(this, "onRSOInvoke", subscription(_constants.RTSubscriptionTypes.RSO_INVOKE).bind(this));
/** */
(0, _defineProperty2["default"])(this, "onRSOUserStatus", subscription(_constants.RTSubscriptionTypes.RSO_USERS).bind(this));
/***** RSO SUBSCRIPTIONS ***************** **/
/***************************************** **/
/** COMMON SUBSCRIPTIONS ******************************************************** **/
/******************************************************************************* **/
/******************************************************************************* **/
/******************************************************************************* **/
/******************************************************************************* **/
/** CONSOLE's SUBSCRIPTIONS **************************************************** **/
/***************************************** **/
/***** LOGGING SUBSCRIPTIONS ****** **/
/** */
(0, _defineProperty2["default"])(this, "onLoggingMessages", subscription(_constants.RTSubscriptionTypes.LOGGING_MESSAGES).bind(this));
/***** LOGGING SUBSCRIPTIONS ****** **/
/***************************************** **/
/***************************************** **/
/***** CONSOLE SUBSCRIPTIONS ****** **/
/** */
(0, _defineProperty2["default"])(this, "onConsoleMessages", subscription(_constants.RTSubscriptionTypes.CONSOLE_MESSAGES).bind(this));
/** */
(0, _defineProperty2["default"])(this, "onDeveloperMessage", subscription(_constants.RTSubscriptionTypes.DEVELOPER_MESSAGES).bind(this));
/** */
(0, _defineProperty2["default"])(this, "onAutomationLoggingMessages", subscription(_constants.RTSubscriptionTypes.AUTOMATION_MESSAGES).bind(this));
this.onMessage = onMessage;
this.emitMessage = emitMessage;
this.subscriptions = {};
}
return (0, _createClass2["default"])(RTSubscriptions, [{
key: "initialize",
value: function initialize() {
var _this = this;
this.onMessage(_constants.RTSocketEvents.SUB_READY, function (data) {
return _this.onSubscriptionReady(data);
});
this.onMessage(_constants.RTSocketEvents.SUB_RES, function (data) {
return _this.onSubscriptionResponse(data);
});
}
}, {
key: "stop",
value: function stop() {
var _this2 = this;
Object.keys(this.subscriptions).forEach(function (subscriptionId) {
_this2.subscriptions[subscriptionId].ready = false;
});
}
}, {
key: "reset",
value: function reset() {
var _this3 = this;
Object.keys(this.subscriptions).forEach(function (subscriptionId) {
return _this3.stopSubscription(subscriptionId);
});
}
}, {
key: "restore",
value: function restore() {
var _this4 = this;
Object.keys(this.subscriptions).forEach(function (subscriptionId) {
_this4.startSubscription(subscriptionId);
});
}
}, {
key: "hasActivity",
value: function hasActivity() {
return !!Object.keys(this.subscriptions).length;
}
}, {
key: "subscribe",
value: function subscribe(name, options, _ref2) {
var _this5 = this;
var parser = _ref2.parser,
onData = _ref2.onData,
onError = _ref2.onError,
onStop = _ref2.onStop,
onReady = _ref2.onReady;
var subscriptionId = _utils["default"].generateUID();
this.subscriptions[subscriptionId] = {
data: {
id: subscriptionId,
name: name,
options: options
},
ready: false,
parser: parser,
onData: onData,
onError: onError,
onStop: onStop,
onReady: onReady
};
this.startSubscription(subscriptionId);
return {
isReady: function isReady() {
return !!_this5.subscriptions[subscriptionId] && _this5.subscriptions[subscriptionId].ready;
},
stop: function stop() {
if (_this5.subscriptions[subscriptionId]) {
_this5.offSubscription(subscriptionId);
}
}
};
}
}, {
key: "startSubscription",
value: function startSubscription(subscriptionId) {
var subscription = this.subscriptions[subscriptionId];
this.emitMessage(_constants.RTSocketEvents.SUB_ON, subscription.data);
}
}, {
key: "stopSubscription",
value: function stopSubscription(subscriptionId) {
var subscription = this.subscriptions[subscriptionId];
if (subscription) {
if (subscription.onStop) {
subscription.onStop();
}
delete this.subscriptions[subscriptionId];
}
}
}, {
key: "offSubscription",
value: function offSubscription(subscriptionId) {
var subscription = this.subscriptions[subscriptionId];
if (subscription) {
this.emitMessage(_constants.RTSocketEvents.SUB_OFF, {
id: subscriptionId
});
this.stopSubscription(subscriptionId);
}
}
}, {
key: "onSubscriptionReady",
value: function onSubscriptionReady(_ref3) {
var id = _ref3.id;
var subscription = this.subscriptions[id];
if (subscription && !subscription.ready) {
subscription.ready = true;
if (subscription.onReady) {
subscription.onReady();
}
}
}
}, {
key: "onSubscriptionResponse",
value: function onSubscriptionResponse(_ref4) {
var id = _ref4.id,
data = _ref4.data,
error = _ref4.error;
var subscription = this.subscriptions[id];
if (subscription) {
if (error) {
if (subscription.onError) {
subscription.onError(error);
}
this.stopSubscription(id);
} else {
if (!subscription.ready) {
subscription.ready = true;
if (subscription.onReady) {
subscription.onReady();
}
}
if (subscription.onData) {
if (typeof subscription.parser === 'function') {
data = subscription.parser(data);
}
subscription.onData(data);
}
}
}
}
/***** CONSOLE SUBSCRIPTIONS ****** **/
/***************************************** **/
/** CONSOLE's SUBSCRIPTIONS **************************************************** **/
/******************************************************************************* **/
/******************************************************************************* **/
}]);
}();