jcc_rpc
Version:
rpc api of jcc
166 lines • 5.5 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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
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, __spreadArray([taskName], args, false));
}
}
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, __spreadArray([taskName], args, false));
}, 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