import * as plugins from "./taskbuffer.plugins" import * as helpers from "./taskbuffer.classes.helpers" export interface ITaskFunction { (x?:any):PromiseLike; } export class Task { name:string; taskFunction:ITaskFunction; buffered:boolean; preTask:Task; afterTask:Task; // initialize by default running:boolean = false; bufferRunner = new helpers.BufferRunner(this); cycleCounter = new helpers.CycleCounter(this); idle:boolean = true; private _state:string = "ready"; constructor(optionsArg:{ taskFunction:ITaskFunction, preTask?:Task, afterTask?:Task, buffered?:boolean, bufferMax?:number, name?:string }){ var options = optionsArg; this.taskFunction = optionsArg.taskFunction; this.preTask = options.preTask; this.afterTask = options.afterTask; this.idle = !this.running; this.buffered = options.buffered; this.bufferRunner.setBufferMax(options.bufferMax); this.name = options.name; } /** * trigger the task. Will trigger buffered if this.buffered is true */ trigger(x?):Promise { if(this.buffered) { return this.triggerBuffered(x) } else { return this.triggerUnBuffered(x); }; }; /** * trigger task unbuffered. */ triggerUnBuffered(x?):Promise{ return helpers.runTask(this,{x:x}); } /** * trigger task buffered. */ triggerBuffered(x?):Promise{ return this.bufferRunner.trigger(x); } get state():string { return this._state; } set state(stateArg:string){ if (stateArg == "locked"){ this._state = "locked"; } else { plugins.beautylog.error("state type " + stateArg + " could not be set"); } } }