@fraserdarwent/xapi-node
Version:
This project is made possible to get data from Forex market, execute market or limit order with NodeJS/JS through WebSocket connection
65 lines • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Listener = exports.ListenerChild = void 0;
class ListenerChild {
constructor(listener, listenerId, key) {
this.listener = listener;
this.listenerId = listenerId;
this.key = key;
}
stopListen() {
this.listener.remove(this.listenerId, this.key);
}
}
exports.ListenerChild = ListenerChild;
class Listener {
constructor() {
this._listeners = {};
}
get listeners() {
return this._listeners;
}
remove(listenerId, key) {
if (this._listeners[listenerId] !== undefined) {
if (this._listeners[listenerId][key] !== undefined) {
delete this._listeners[listenerId][key];
if (Object.keys(this._listeners[listenerId]).length === 0) {
delete this._listeners[listenerId];
}
}
}
}
addListener(listenerId, callBack, key = null) {
if (typeof (callBack) === 'function') {
if (this._listeners[listenerId] === undefined) {
this._listeners[listenerId] = {};
}
key = key === null
? 'g' + Object.keys(this._listeners[listenerId]).length
: 's' + key;
this._listeners[listenerId][key] = callBack;
return new ListenerChild(this, listenerId, key);
}
throw new Error('addListener "callBack" parameter is not callback');
}
callListener(listenerId, params = []) {
let errors = [];
let values = [];
if (this._listeners[listenerId] !== undefined) {
Object.keys(this._listeners[listenerId]).forEach((key) => {
try {
values.push(this._listeners[listenerId][key](...params));
}
catch (e) {
errors.push(e);
}
});
}
if (errors.length > 0) {
throw errors[0];
}
return values;
}
}
exports.Listener = Listener;
//# sourceMappingURL=Listener.js.map