UNPKG

mm_os

Version:

MM_OS服务端架构,用于快速构建应用程序,支持网站建设、小程序后台、AI应用、物联网(IOT/AIOT)、游戏服务端等多种场景。

149 lines (140 loc) 3.13 kB
const Manager = require('mm_machine').Manager; const Drive = require('./drive'); /** * 任务类 * @augments {Manager} * @class */ class Task extends Manager { /** * 配置参数 * @type {object} */ static config = { /** * 名称 * @type {string} */ name: '', /** * 标题 * @type {string} */ title: '任务管理器', /** * 描述 * @type {string} */ description: '这是任务管理器', /** * 检索文件名 * @type {string} */ filename: 'task.json', /** * 模板目录 * @type {string} */ tpl_dir: __dirname, /** * 基础目录 * @type {string} */ base_dir: '../common/task'.fullname(__dirname), /** * 自定义目录,加载项目自定义资源 * @type {string} */ dir: './app'.fullname(), /** * 搜索模式 dir按目录搜索 | file按文件名搜索 * @type {string} */ search_way: 'file', /** * 是否懒加载 * @type {boolean} */ lazy_load: false, /** * 模式 * 1.生产模式,改变文件不会重新加载 * 2.热更新模式,改变配置文件会重新加载配置,不重新加载脚本 * 3.热重载模式,改变配置文件都会加载配置和脚本 * 4.重载模式,执行完后重新加载脚本,避免变量污染 * 5.热更新+重载模式,改变配置文件重新加载配置和脚本,执行完后重新加载脚本 * @type {number} */ mode: 3 }; /** * 构造函数 * @param {object} config 配置参数 * @param {object} parent 父级模块 */ constructor(config, parent) { super({ ...Task.config, ...config }, parent); } } /** * 任务驱动类 * @type {Drive} */ Task.prototype.Drive = Drive; /** * 执行任务 * @param {string} name 要执行的名称 */ Task.prototype.run = async function (name) { if (name) { let mod = this.getMod(name); if (mod) { await mod.run(); } } else { let infos = this.getInfos(); for (var i = 0, info; info = infos[i++];) { if (info.state === 1) { try { let mod = this.getMod(info.name); if (mod) { await mod.run(); } } catch (error) { this.log('error', '定时任务错误', info.name, error); } } } } }; exports.Task = Task; /** * Task模板池 */ if (!$.pool.task) { $.pool.task = {}; } /** * Task管理器,用于创建缓存 * @param {string} scope 作用域 * @param {string} title 标题 * @returns {object} 返回一个缓存类 */ function taskAdmin(scope, title) { var sc = scope || $.val.scope + ''; var obj = $.pool.task[sc]; if (!obj) { $.pool.task[sc] = new Task({ name: sc, title: title }); obj = $.pool.task[sc]; } return obj; } /** * @module 导出Task管理器 */ if ($.admin) { $.admin.task = taskAdmin; }