backendless-rt-client
Version:
Backendless RT Client for connect to Backendless RT Server
131 lines (130 loc) • 4.49 kB
JavaScript
;
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 _constants = require("./constants");
var RTSocket = exports["default"] = /*#__PURE__*/function () {
function RTSocket(config, host) {
(0, _classCallCheck2["default"])(this, RTSocket);
var _require = require('socket.io-client'),
io = _require.io;
this.config = config;
this.events = {};
var _config$getSocketConf = config.getSocketConfig(),
url = _config$getSocketConf.url,
options = _config$getSocketConf.options;
this.ioSocket = io(url, options);
}
return (0, _createClass2["default"])(RTSocket, [{
key: "connect",
value: function connect() {
this.ioSocket.connect();
}
}, {
key: "close",
value: function close() {
this.log('log', 'close socket');
this.events = {};
this.ioSocket.off();
this.ioSocket.close();
}
}, {
key: "on",
value: function on(event, callback) {
var _this = this;
if (!this.events[event]) {
this.ioSocket.on(event, function (data) {
return _this.onEvent(event, data);
});
}
this.events[event] = this.events[event] || [];
this.events[event].push(callback);
}
}, {
key: "off",
value: function off(event, callback) {
this.events[event] = callback ? this.events[event].filter(function (f) {
return f !== callback;
}) : [];
if (!this.events[event].length) {
delete this.events[event];
}
if (!this.events[event]) {
this.ioSocket.off(event);
}
}
}, {
key: "onEvent",
value: function onEvent(event, data) {
this.logMessage('FROM SERVER', event, data);
if (this.events[event]) {
this.events[event].forEach(function (callback) {
return callback(data);
});
}
}
}, {
key: "emit",
value: function emit(event, data) {
this.logMessage('TO SERVER', event, data);
this.ioSocket.emit(event, data);
}
}, {
key: "log",
value: function log(type) {
if (this.config.debugMode) {
var _console;
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
// eslint-disable-next-line
(_console = console)[type].apply(_console, ['[RT Client]:'].concat(args));
}
}
}, {
key: "logMessage",
value: function logMessage(type, event, data) {
this.log('log', "[".concat(type, "] - [event: ").concat(event, "] - arguments: ").concat(JSON.stringify(data), " "));
}
}], [{
key: "connect",
value: function connect(config, onDisconnect) {
return Promise.resolve().then(function () {
return config.prepare();
}).then(function () {
return new Promise(function (resolve, reject) {
var rtSocket = new RTSocket(config);
rtSocket.on(_constants.NativeSocketEvents.CONNECT, onConnect);
rtSocket.on(_constants.NativeSocketEvents.CONNECT_ERROR, onError);
rtSocket.on(_constants.NativeSocketEvents.CONNECT_TIMEOUT, onError);
rtSocket.on(_constants.NativeSocketEvents.ERROR, function (error) {
rtSocket.log('error', 'received ERROR event while connecting', error);
closeAndReject(error);
});
rtSocket.connect();
function onConnect() {
rtSocket.log('log', 'socket connected');
resolve(rtSocket);
}
function onError(error) {
rtSocket.log('error', 'received one of [CONNECT_ERROR,CONNECT_TIMEOUT] socket event while connecting', error);
closeAndReject(error);
}
function closeAndReject(error) {
rtSocket.log('log', 'close and reject socket with error:', error);
rtSocket.close();
reject(error);
}
});
}).then(function (rtSocket) {
rtSocket.on(_constants.NativeSocketEvents.DISCONNECT, onDisconnect);
rtSocket.on(_constants.NativeSocketEvents.ERROR, onDisconnect);
return rtSocket;
});
}
}]);
}();