jcc_rpc
Version:
rpc api of jcc
162 lines • 5.26 kB
JavaScript
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
var events_1 = require("events");
// interface Constructable {
// new(...args): ISubscribeTask;
// }
var SubscribeTask = /** @class */ (function (_super) {
__extends(SubscribeTask, _super);
function SubscribeTask() {
var _this = _super.call(this) || this;
_this.taskMap = new Map();
_this.taskIdMap = new Map();
return _this;
}
/**
* Register task
*
* @param {string} taskName task name
* @param {(...args) => Promise<any>} task
* @param {boolean} [polling=true] whether polling
* @param {number} [timer=5000] interval time
* @returns {SubscribeTask}
* @memberof SubscribeTask
*/
SubscribeTask.prototype.register = function (taskName, task, polling, timer) {
if (polling === void 0) { polling = true; }
if (timer === void 0) { timer = 5000; }
if (this.taskMap.get(taskName) === undefined) {
var taskJob = { timer: timer, task: task, polling: polling };
this.taskMap.set(taskName, taskJob);
}
return this;
};
/**
* Start task
*
* If polling is true when register, would polling excute the task.
*
* Emit event of task name after the task is finished.
*
* @param {string} taskName task name
* @param {*} args
* @returns {SubscribeTask}
* @memberof SubscribeTask
*/
SubscribeTask.prototype.start = function (taskName) {
var _this = this;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var taskJob = this.getTask(taskName);
if (taskJob) {
taskJob
.task.apply(taskJob, args).then(function (res) {
_this.emit(taskName, null, res);
})
.catch(function (err) {
_this.emit(taskName, err, null);
});
if (taskJob.polling) {
this.polling.apply(this, __spreadArrays([taskName], args));
}
}
return this;
};
/**
* Stop polling
*
* @param {string} taskName
* @returns {SubscribeTask}
* @memberof SubscribeTask
*/
SubscribeTask.prototype.stopPolling = function (taskName) {
var taskId = this.getTaskId(taskName);
if (taskId) {
clearInterval(taskId);
this.taskIdMap.delete(taskName);
}
return this;
};
/**
* Stop all polling tasks
*
* @returns {SubscribeTask}
* @memberof SubscribeTask
*/
SubscribeTask.prototype.stopAll = function () {
this.taskIdMap.forEach(function (id) {
clearInterval(id);
});
this.taskIdMap.clear();
return this;
};
/**
* Remove registered task
*
* @param {string} taskName
* @returns {SubscribeTask}
* @memberof SubscribeTask
*/
SubscribeTask.prototype.removeTask = function (taskName) {
this.taskMap.delete(taskName);
return this;
};
/**
* Remove all registered tasks
*
* @returns {SubscribeTask}
* @memberof SubscribeTask
*/
SubscribeTask.prototype.removeAll = function () {
this.taskMap.clear();
return this;
};
SubscribeTask.prototype.polling = function (taskName) {
var _this = this;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
if (!this.getTaskId(taskName)) {
var taskJob = this.getTask(taskName);
if (taskJob) {
var taskId = setInterval(function () {
_this.start.apply(_this, __spreadArrays([taskName], args));
}, taskJob.timer);
this.taskIdMap.set(taskName, taskId);
}
}
return this;
};
SubscribeTask.prototype.getTask = function (taskName) {
return this.taskMap.get(taskName);
};
SubscribeTask.prototype.getTaskId = function (taskName) {
return this.taskIdMap.get(taskName);
};
return SubscribeTask;
}(events_1.EventEmitter));
exports.default = SubscribeTask;
//# sourceMappingURL=subscribe.js.map