@thatcompany/ts-tool
Version:
基于TypeScript编写的工具库
96 lines • 3.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ITaskRegister = void 0;
const logger_1 = require("../../../../logger");
const objector_1 = require("../../../../objector");
const file_1 = require("../../../../file");
const annotation_1 = require("../../../annotation");
const uuid_1 = require("../../../../uuid");
const logger = logger_1.LoggerContext.getSubLogger('TaskRegister', true);
class ITaskRegister extends annotation_1.IRegister {
configs = []; // 存放所有任务配置的数组
singletonConfigs = []; // 存放所有单例任务配置的数组, 填带了注解的类名即可
taskList = new Map(); // 存放所有任务的 Map
serviceMap = new Map(); // 存放所有服务的 Map
services = new Map(); // 存放所有服务的实例 Map
// 扫描对应的 SERVICE_TYPE 服务, 并注册到 serviceMap 中
async scanService() {
logger.silly('------------------------------');
logger.silly('🌟 扫描任务实体:调度任务');
this.serviceMap.clear();
try {
// @ts-ignore
const services = await file_1.Scanner.getServicesBySymbol(this.IDENTIFIER_CHILD);
for (const service of services) {
this.serviceMap.set(service.name, service);
logger.silly(`发现调度任务实体:${service.name}`);
}
}
catch (error) {
logger.error('任务实体扫描失败', error);
}
logger.silly('🪶 扫描任务实体:调度任务实体扫描完成');
logger.silly('------------------------------\n');
}
// 注册任务,根据所有任务配置,构建任务并注册到 taskList 中
async register(keys = []) {
await this.scanService();
logger.silly('------------------------------');
this.configs = [];
this.configs = ((await this.fetchConfigs()) || []);
if (this.singletonConfigs.length > 0) {
this.singletonConfigs.map((item) => {
const serviceCLass = this.serviceMap.get(item);
if (serviceCLass instanceof Function) {
this.configs.push({
Id: uuid_1.UUID.generate(),
class: item,
__singleton__: true,
});
}
});
}
logger.silly('🌟 注册任务实例:调度任务');
const tasksToRegister = objector_1.Objects.isEmpty(keys)
? this.configs
: this.configs.filter((item) => keys.includes(item.Id + ''));
for (const item of tasksToRegister) {
await this.registerTask(item);
}
logger.silly('🪶 注册配置实例:调度任务配置注册完成');
logger.silly('------------------------------\n');
}
// 销毁任务
destroy(keys = []) {
logger.silly('------------------------------');
logger.silly('🌟 服务清理:调度任务');
if (objector_1.Objects.isEmpty(keys)) {
logger.silly('清理所有调度任务');
this.taskList.forEach((task) => task.stop());
this.taskList.clear();
}
else {
for (const key of keys) {
const task = this.taskList.get(key + '');
if (task) {
task.stop();
// @ts-ignore
logger.silly(`清理调度任务:${task['__title']}`);
this.taskList.delete(key);
}
}
}
logger.silly('🪶 服务清理:调度任务完成');
logger.silly('------------------------------\n');
}
/**
* 重载任务
* @param keys
*/
async reload(keys = []) {
this.destroy(keys);
await this.register(keys);
}
}
exports.ITaskRegister = ITaskRegister;
//# sourceMappingURL=ITaskRegister.js.map