ms/packages/api/src/task.ts
MiaoWoo 13e9f0a5af feat: update command and complate task
Signed-off-by: MiaoWoo <admin@yumc.pw>
2019-09-21 14:58:00 +08:00

56 lines
1.3 KiB
TypeScript

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;
}
}