diff --git a/src/client/web/src/common/cron.ts b/src/client/web/src/common/cron.ts new file mode 100644 index 0000000..d8d0f9a --- /dev/null +++ b/src/client/web/src/common/cron.ts @@ -0,0 +1,40 @@ +import { Map } from "immutable"; + +export interface CronTask { + func: (arg?: any, ...optionalArgs: any[]) => void; + delay: number; + args?: any[]; + handler?: number; +} + +export class Cron { + private tasks: Map; + constructor() { + this.tasks = Map(); + } + + add = (name: string, task: CronTask) => { + if (this.tasks.has(name)) { + this.delete(name); + } + + const handler = window.setInterval(task.func, task.delay, ...task.args); + task.handler = handler; + this.tasks = this.tasks.set(name, task); + }; + + delete = (name: string) => { + const preTask = this.tasks.get(name); + window.clearInterval(preTask.handler); + this.tasks = this.tasks.delete(name); + }; + + getTasks = (): Map => { + return this.tasks; + }; +} + +const cronTable = new Cron(); +export const CronTable = (): Cron => { + return cronTable; +};