UNPKG

@thatcompany/ts-tool

Version:

基于TypeScript编写的工具库

96 lines 3.97 kB
"use strict"; 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