import { injectable, DefaultContainer as container } from "@ms/container"; export namespace task { export const TaskManager = Symbol('TaskManager') export interface TaskManager { create(func: Function): task.Task; } /** * 任务抽象 */ export abstract class Task { protected plugin: any; protected func: Function; protected isAsync: boolean = false; protected laterTime: number = 0; protected interval: number = 0; constructor(plugin: any, func: Function) { this.plugin = plugin; this.func = func; } async(isAsync: boolean = true): task.Task { this.isAsync = isAsync; return this; } later(tick: number): task.Task { this.laterTime = tick; return this; } timer(tick: number): task.Task { this.interval = tick; return this; } protected run(): void { try { this.func(); } catch (ex) { console.console('§4插件执行任务时发生错误', ex) console.ex(ex); } } abstract submit(): Cancelable; } /** * 返可取消的对象 */ export interface Cancelable { cancel(): boolean; } }