diff --git a/dist/taskbuffer.classes.helpers.d.ts b/dist/taskbuffer.classes.helpers.d.ts index c0b737f..3249386 100644 --- a/dist/taskbuffer.classes.helpers.d.ts +++ b/dist/taskbuffer.classes.helpers.d.ts @@ -7,4 +7,24 @@ export declare let isTaskTouched: (taskArg: Task, touchedTasksArray: Task[]) => export declare let runTask: (taskArg: Task, optionsArg?: { touchedTasksArray: Task[]; }) => plugins.Q.Promise<{}>; -export declare let runBufferedTask: (taskArg: Task) => void; +export interface cycleObject { + cycleCounter: number; + deferred: plugins.Q.Deferred; +} +export declare class CycleCounter { + task: Task; + cycleObjectArray: cycleObject[]; + constructor(taskArg: Task); + getPromiseForCycle(cycleCountArg: number): plugins.Q.Promise<{}>; + informOfCycle(): void; +} +export declare class BufferRunner { + task: Task; + bufferCounter: number; + bufferMax: number; + running: boolean; + constructor(taskArg: Task); + private _run(); + setBufferMax(bufferMaxArg: number): void; + trigger(): PromiseLike; +} diff --git a/dist/taskbuffer.classes.helpers.js b/dist/taskbuffer.classes.helpers.js index c571a6a..52dbf33 100644 --- a/dist/taskbuffer.classes.helpers.js +++ b/dist/taskbuffer.classes.helpers.js @@ -67,17 +67,86 @@ exports.runTask = function (taskArg, optionsArg = { touchedTasksArray: [] }) { localDeferred.resolve(); return done.promise; }; -exports.runBufferedTask = (taskArg) => { - let recursiveBufferRunner = () => { - if (taskArg.bufferCounter > 0) { - taskArg.runningBuffered = true; - taskArg.bufferCounter--; - exports.runTask(taskArg) - .then(recursiveBufferRunner); +class CycleCounter { + constructor(taskArg) { + this.cycleObjectArray = []; + this.task = taskArg; + } + ; + getPromiseForCycle(cycleCountArg) { + let done = plugins.Q.defer(); + let cycleObject = { + cycleCounter: cycleCountArg, + deferred: done + }; + this.cycleObjectArray.push(cycleObject); + return done.promise; + } + ; + informOfCycle() { + let newCycleObjectArray = []; + this.cycleObjectArray.forEach(cycleObjectArg => { + cycleObjectArg.cycleCounter--; + if (cycleObjectArg.cycleCounter <= 0) { + cycleObjectArg.deferred.resolve(); + } + else { + newCycleObjectArray.push(cycleObjectArg); + } + ; + }); + this.cycleObjectArray = newCycleObjectArray; + } +} +exports.CycleCounter = CycleCounter; +class BufferRunner { + constructor(taskArg) { + // initialze by default + this.bufferCounter = 0; + this.bufferMax = 1; + this.running = false; + this.task = taskArg; + } + ; + _run() { + let recursiveBufferRunner = () => { + if (this.bufferCounter >= 0) { + this.running = true; + this.task.running = true; + exports.runTask(this.task) + .then(() => { + console.log(this.bufferCounter); + this.bufferCounter--; + console.log(this.bufferCounter); + this.task.cycleCounter.informOfCycle(); + recursiveBufferRunner(); + }); + } + else { + this.running = false; + this.task.running = false; + } + }; + recursiveBufferRunner(); + } + ; + setBufferMax(bufferMaxArg) { + this.bufferMax = bufferMaxArg; + } + ; + trigger() { + if (!(this.bufferCounter >= this.bufferMax)) { + this.bufferCounter++; } - else { - taskArg.runningBuffered = false; + ; + let returnPromise = this.task.cycleCounter.getPromiseForCycle(this.bufferCounter + 1); + if (!this.running) { + this._run(); } - }; -}; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsTUFBTyxPQUFPLFdBQVcsc0JBQXNCLENBQUMsQ0FBQztBQUNqRCwwQ0FBaUMsMkJBQTJCLENBQUMsQ0FBQTtBQUVsRCx5QkFBaUIsR0FBaUI7SUFDekMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDLENBQUM7QUFFUyxjQUFNLEdBQUcsVUFBUyxPQUFPO0lBQ2hDLEVBQUUsQ0FBQSxDQUNFLE9BQU8sWUFBWSw4QkFBSTtXQUNwQixPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQUssVUFDL0IsQ0FBQyxDQUFBLENBQUM7UUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDakIsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUdTLHFCQUFhLEdBQUcsQ0FBQyxPQUFZLEVBQUUsaUJBQXdCO0lBQzlELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxDQUFBLENBQUM7UUFDbEMsRUFBRSxDQUFBLENBQUMsT0FBTyxLQUFLLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUEsQ0FBQztZQUN0QyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7SUFDTCxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUE7QUFFVSxlQUFPLEdBQUcsVUFBUyxPQUFZLEVBQUMs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 \ No newline at end of file + return returnPromise; + } + ; +} +exports.BufferRunner = BufferRunner; +; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsTUFBTyxPQUFPLFdBQVcsc0JBQXNCLENBQUMsQ0FBQztBQUNqRCwwQ0FBb0MsMkJBQTJCLENBQUMsQ0FBQTtBQUVyRCx5QkFBaUIsR0FBa0I7SUFDMUMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDLENBQUM7QUFFUyxjQUFNLEdBQUcsVUFBVSxPQUFPO0lBQ2pDLEVBQUUsQ0FBQyxDQUNDLE9BQU8sWUFBWSw4QkFBSTtXQUNwQixPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQUssVUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDakIsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUdTLHFCQUFhLEdBQUcsQ0FBQyxPQUFhLEVBQUUsaUJBQXlCO0lBQ2hFLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDbkMsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7SUFDTCxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUE7QUFFVSxlQUFPLEdBQUcsVUFBVSxPQUFhLEVBQUUs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 \ No newline at end of file diff --git a/dist/taskbuffer.classes.task.d.ts b/dist/taskbuffer.classes.task.d.ts index b43d11e..6e61d4a 100644 --- a/dist/taskbuffer.classes.task.d.ts +++ b/dist/taskbuffer.classes.task.d.ts @@ -1,21 +1,20 @@ /// import * as plugins from "./taskbuffer.plugins"; +import * as helpers from "./taskbuffer.classes.helpers"; export interface ITaskFunction { (): PromiseLike; } export declare class Task { name: string; task: any; - running: boolean; - runningBuffered: boolean; - idle: boolean; buffered: boolean; - bufferCounter: number; - bufferMax: number; - private _counterTriggerAbsolute; - private _state; preTask: Task; afterTask: Task; + running: boolean; + bufferRunner: helpers.BufferRunner; + cycleCounter: helpers.CycleCounter; + idle: boolean; + private _state; constructor(optionsArg: { taskFunction: ITaskFunction; preTask?: Task; @@ -31,10 +30,10 @@ export declare class Task { /** * trigger task unbuffered. */ - triggerUnBuffered(): plugins.Q.Promise<{}>; + triggerUnBuffered(): PromiseLike; /** * trigger task buffered. */ - triggerBuffered(): plugins.Q.Promise<{}>; + triggerBuffered(): PromiseLike; state: string; } diff --git a/dist/taskbuffer.classes.task.js b/dist/taskbuffer.classes.task.js index bb6956a..e41f7ce 100644 --- a/dist/taskbuffer.classes.task.js +++ b/dist/taskbuffer.classes.task.js @@ -3,20 +3,19 @@ const plugins = require("./taskbuffer.plugins"); const helpers = require("./taskbuffer.classes.helpers"); class Task { constructor(optionsArg) { + // initialize by default this.running = false; - this.runningBuffered = false; + this.bufferRunner = new helpers.BufferRunner(this); + this.cycleCounter = new helpers.CycleCounter(this); this.idle = true; - this.buffered = false; - this.bufferMax = 1; - this._counterTriggerAbsolute = 0; + this._state = "ready"; var options = optionsArg; this.task = optionsArg.taskFunction; this.preTask = options.preTask; this.afterTask = options.afterTask; - this.running = false; - this.idle = !this.running && !this.runningBuffered; + this.idle = !this.running; this.buffered = options.buffered; - this.bufferMax = options.bufferMax; + this.bufferRunner.setBufferMax(options.bufferMax); this.name = options.name; } /** @@ -46,16 +45,7 @@ class Task { * trigger task buffered. */ triggerBuffered() { - var done = plugins.Q.defer(); - if (!(this.bufferCounter >= this.bufferMax)) { - this.bufferCounter++; - } - ; - if (!this.runningBuffered) { - helpers.runBufferedTask(this); - } - ; - return done.promise; + return this.bufferRunner.trigger(); } get state() { return this._state; @@ -70,4 +60,4 @@ class Task { } } exports.Task = Task; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMudGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsTUFBWSxPQUFPLFdBQU0sc0JBQ3pCLENBQUMsQ0FEOEM7QUFDL0MsTUFBWSxPQUFPLFdBQU0sOEJBR3pCLENBQUMsQ0FIc0Q7QUFPdkQ7SUFjSSxZQUFZLFVBT1g7UUFsQkQsWUFBTyxHQUFXLEtBQUssQ0FBQztRQUN4QixvQkFBZSxHQUFXLEtBQUssQ0FBQztRQUNoQyxTQUFJLEdBQVcsSUFBSSxDQUFDO1FBQ3BCLGFBQVEsR0FBVyxLQUFLLENBQUM7UUFFekIsY0FBUyxHQUFVLENBQUMsQ0FBQztRQUNiLDRCQUF1QixHQUFVLENBQUMsQ0FBQztRQWF2QyxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDSCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLEVBQUUsQ0FBQSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLGVBQWUsRUFBRTtpQkFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxDQUFDLENBQUM7WUFDRixJQUFJLENBQUMsaUJBQWlCLEVBQUU7aUJBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUFBLENBQUM7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDOztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNYLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsRUFBRSxDQUFBLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUEsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDeEIsQ0FBQztRQUFBLENBQUM7UUFDRixFQUFFLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUFBLENBQUM7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLFFBQWU7UUFDckIsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFBLENBQUM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDM0IsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztRQUNqRixDQUFDO0lBQ0wsQ0FBQztBQUNMLENBQUM7QUFoRlksWUFBSSxPQWdGaEIsQ0FBQSJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLnRhc2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMudGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsTUFBWSxPQUFPLFdBQU0sc0JBQ3pCLENBQUMsQ0FEOEM7QUFDL0MsTUFBWSxPQUFPLFdBQU0sOEJBR3pCLENBQUMsQ0FIc0Q7QUFPdkQ7SUFjSSxZQUFZLFVBT1g7UUFkRCx3QkFBd0I7UUFDeEIsWUFBTyxHQUFXLEtBQUssQ0FBQztRQUN4QixpQkFBWSxHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxpQkFBWSxHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxTQUFJLEdBQVcsSUFBSSxDQUFDO1FBQ1osV0FBTSxHQUFVLE9BQU8sQ0FBQztRQVU1QixJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTztRQUNILElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsRUFBRSxDQUFBLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDZixJQUFJLENBQUMsZUFBZSxFQUFFO2lCQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLENBQUMsQ0FBQztZQUNGLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtpQkFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQUEsQ0FBQztRQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7O0lBRUQ7O09BRUc7SUFDSCxpQkFBaUI7UUFDYixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxRQUFlO1FBQ3JCLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1FBQzNCLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDLENBQUM7UUFDakYsQ0FBQztJQUNMLENBQUM7QUFDTCxDQUFDO0FBeEVZLFlBQUksT0F3RWhCLENBQUEifQ== \ No newline at end of file diff --git a/test/test.js b/test/test.js index dc14b4d..6edd8c7 100644 --- a/test/test.js +++ b/test/test.js @@ -11,6 +11,15 @@ let testTaskFunction = function () { done.resolve(); return done.promise; }; +let testTaskFunctionTimeout = function () { + let done = q.defer(); + console.log("main function started!"); + setTimeout(() => { + console.log("main function ended!"); + done.resolve(); + }, 2000); + return done.promise; +}; let testPreTask = new taskbuffer.Task({ taskFunction: function () { let done = q.defer(); @@ -20,6 +29,44 @@ let testPreTask = new taskbuffer.Task({ }, preTask: testTask }); +// some more tasks to wirj with +let task1 = new taskbuffer.Task({ + name: "Task 1", + taskFunction: () => { + let done = q.defer(); + console.log("Task1 started"); + setTimeout(() => { + console.log("Task1 executed"); + done.resolve(); + }, 5000); + return done.promise; + } +}); +let task2 = new taskbuffer.Task({ + name: "Task 1", + taskFunction: () => { + let done = q.defer(); + console.log("Task2 started"); + setTimeout(() => { + console.log("Task2 executed"); + done.resolve(); + }, 5000); + return done.promise; + } +}); +let task3 = new taskbuffer.Task({ + name: "Task 3", + taskFunction: () => { + let done = q.defer(); + console.log("Task3 started"); + setTimeout(() => { + console.log("Task3 executed"); + done.resolve(); + }, 5000); + return done.promise; + } +}); +// the actual tests describe("taskbuffer", function () { describe(".Task", function () { it("new Task() should return a new task", function () { @@ -48,6 +95,20 @@ describe("taskbuffer", function () { let localTestTask = new taskbuffer.Task({ taskFunction: testTaskFunction }); localTestTask.trigger().then(done); }); + it("should run buffered", function (done) { + this.timeout(10000); + let localTestTask = new taskbuffer.Task({ + taskFunction: testTaskFunctionTimeout, + buffered: true, + bufferMax: 2 + }); + localTestTask.trigger(); + localTestTask.trigger(); + localTestTask.trigger(); + localTestTask.trigger().then(() => { + done(); + }); + }); }); describe("Taskchain", function () { let testTaskchain; @@ -79,42 +140,6 @@ describe("taskbuffer", function () { }); }); describe("taskparallel", function () { - let task1 = new taskbuffer.Task({ - name: "Task 1", - taskFunction: () => { - let done = q.defer(); - console.log("Task1 started"); - setTimeout(() => { - console.log("Task1 executed"); - done.resolve(); - }, 5000); - return done.promise; - } - }); - let task2 = new taskbuffer.Task({ - name: "Task 1", - taskFunction: () => { - let done = q.defer(); - console.log("Task2 started"); - setTimeout(() => { - console.log("Task2 executed"); - done.resolve(); - }, 5000); - return done.promise; - } - }); - let task3 = new taskbuffer.Task({ - name: "Task 3", - taskFunction: () => { - let done = q.defer(); - console.log("Task3 started"); - setTimeout(() => { - console.log("Task3 executed"); - done.resolve(); - }, 5000); - return done.promise; - } - }); it("should run in Parallel", function (done) { this.timeout("7000"); let testTaskparallel = new taskbuffer.Taskparallel({ @@ -126,4 +151,4 @@ describe("taskbuffer", function () { }); }); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsTUFBTyxVQUFVLFdBQVcsZUFBZSxDQUFDLENBQUM7QUFDN0MsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9CLE1BQU8sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFBO0FBRXZCLG1DQUFtQztBQUNuQyxJQUFJLFFBQXdCLENBQUM7QUFDN0IsSUFBSSxnQkFBZ0IsR0FBRztJQUNuQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0lBQ3RDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQTtBQUNELElBQUksV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQztJQUNsQyxZQUFZLEVBQUM7UUFDVCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxPQUFPLEVBQUMsUUFBUTtDQUNuQixDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsWUFBWSxFQUFDO0lBQ2xCLFFBQVEsQ0FBQyxPQUFPLEVBQUM7UUFDYixFQUFFLENBQUMscUNBQXFDLEVBQUM7WUFDckMsUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFDLFlBQVksRUFBQyxnQkFBZ0IsRUFBQyxPQUFPLEVBQUMsV0FBVyxFQUFDLENBQUMsQ0FB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsTUFBTyxVQUFVLFdBQVcsZUFBZSxDQUFDLENBQUM7QUFDN0MsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9CLE1BQU8sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFBO0FBRXZCLG1DQUFtQztBQUNuQyxJQUFJLFFBQXlCLENBQUM7QUFDOUIsSUFBSSxnQkFBZ0IsR0FBRztJQUNuQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0lBQ3RDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGLElBQUksdUJBQXVCLEdBQUc7SUFDMUIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN0QyxVQUFVLENBQUM7UUFDUCxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNSLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGLElBQUksV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQztJQUNsQyxZQUFZLEVBQUU7UUFDVixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hD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 \ No newline at end of file diff --git a/test/test.ts b/test/test.ts index 4bf3e3f..aa240c9 100644 --- a/test/test.ts +++ b/test/test.ts @@ -4,123 +4,153 @@ let should = require("should"); import q = require("q") // setup some testData to work with -let testTask:taskbuffer.Task; -let testTaskFunction = function(){ +let testTask: taskbuffer.Task; +let testTaskFunction = function () { let done = q.defer(); console.log("main function executed!") done.resolve(); return done.promise; -} +}; + +let testTaskFunctionTimeout = function () { + let done = q.defer(); + console.log("main function started!"); + setTimeout(() => { + console.log("main function ended!"); + done.resolve(); + },2000); + return done.promise; +}; + let testPreTask = new taskbuffer.Task({ - taskFunction:function(){ + taskFunction: function () { let done = q.defer(); console.log("preTask executed"); done.resolve(); return done.promise; }, - preTask:testTask + preTask: testTask }); -describe("taskbuffer",function(){ - describe(".Task",function(){ - it("new Task() should return a new task",function(){ - testTask = new taskbuffer.Task({taskFunction:testTaskFunction,preTask:testPreTask}); + +// some more tasks to wirj with +let task1 = new taskbuffer.Task({ + name: "Task 1", + taskFunction: () => { + let done = q.defer(); + console.log("Task1 started"); + setTimeout(() => { + console.log("Task1 executed"); + done.resolve(); + }, 5000) + return done.promise; + } +}); +let task2 = new taskbuffer.Task({ + name: "Task 1", + taskFunction: () => { + let done = q.defer(); + console.log("Task2 started"); + setTimeout(() => { + console.log("Task2 executed"); + done.resolve(); + }, 5000) + return done.promise; + } +}); +let task3 = new taskbuffer.Task({ + name: "Task 3", + taskFunction: () => { + let done = q.defer(); + console.log("Task3 started"); + setTimeout(() => { + console.log("Task3 executed"); + done.resolve(); + }, 5000) + return done.promise; + } +}); + +// the actual tests +describe("taskbuffer", function () { + describe(".Task", function () { + it("new Task() should return a new task", function () { + testTask = new taskbuffer.Task({ taskFunction: testTaskFunction, preTask: testPreTask }); }); - it("testTask should be and instance of Task",function(){ + it("testTask should be and instance of Task", function () { testTask.should.be.instanceof(taskbuffer.Task); }); - it("testTask.idle is true",function(){ - if (!testTask.idle){ + it("testTask.idle is true", function () { + if (!testTask.idle) { throw new Error("testTask.idle is not true"); } - + }); - it("testTask.running is type boolean and initially false",function(){ + it("testTask.running is type boolean and initially false", function () { testTask.running.should.be.type("boolean"); testTask.running.should.be.false(); }); - it("testTask.trigger() should return Promise",function(){ + it("testTask.trigger() should return Promise", function () { testTask.trigger().should.be.Promise(); }); - it("testTask.trigger() returned Promise should be fullfilled",function(done){ + it("testTask.trigger() returned Promise should be fullfilled", function (done) { testTask.trigger() .then(done); }); - it("should run a task without pre and afterTask",function(done){ - let localTestTask = new taskbuffer.Task({taskFunction:testTaskFunction}); + it("should run a task without pre and afterTask", function (done) { + let localTestTask = new taskbuffer.Task({ taskFunction: testTaskFunction }); localTestTask.trigger().then(done); }); + + it("should run buffered", function (done) { + this.timeout(10000); + let localTestTask = new taskbuffer.Task({ + taskFunction: testTaskFunctionTimeout, + buffered:true, + bufferMax:2 + }); + localTestTask.trigger(); + localTestTask.trigger(); + localTestTask.trigger(); + localTestTask.trigger().then(() => { + done(); + }) + }); }); - describe("Taskchain",function(){ + describe("Taskchain", function () { let testTaskchain; let testTaskArray = [ new taskbuffer.Task({ - name:"task1", - taskFunction:function(){ + name: "task1", + taskFunction: function () { let done = q.defer(); - setTimeout(done.resolve,2000); + setTimeout(done.resolve, 2000); return done.promise; } }), new taskbuffer.Task({ - name:"task2", - taskFunction: function(){ + name: "task2", + taskFunction: function () { let done = q.defer(); - setTimeout(done.resolve,2000); + setTimeout(done.resolve, 2000); return done.promise; } }), ]; - it("should run tasks in sequence",function(done){ + it("should run tasks in sequence", function (done) { this.timeout(5000); testTaskchain = new taskbuffer.Taskchain({ - name:"Taskchain1", - taskArray:testTaskArray + name: "Taskchain1", + taskArray: testTaskArray }); testTaskchain.trigger().then(done); }); }); - describe("taskparallel",function(){ - let task1 = new taskbuffer.Task({ - name:"Task 1", - taskFunction: () => { - let done = q.defer(); - console.log("Task1 started"); - setTimeout(() => { - console.log("Task1 executed"); - done.resolve(); - },5000) - return done.promise; - } - }); - let task2 = new taskbuffer.Task({ - name:"Task 1", - taskFunction: () => { - let done = q.defer(); - console.log("Task2 started"); - setTimeout(() => { - console.log("Task2 executed"); - done.resolve(); - },5000) - return done.promise; - } - }); - let task3 = new taskbuffer.Task({ - name:"Task 3", - taskFunction: () => { - let done = q.defer(); - console.log("Task3 started"); - setTimeout(() => { - console.log("Task3 executed"); - done.resolve(); - },5000) - return done.promise; - } - }); - it("should run in Parallel",function(done){ + describe("taskparallel", function () { + it("should run in Parallel", function (done) { this.timeout("7000"); let testTaskparallel = new taskbuffer.Taskparallel({ - taskArray:[task1,task2,task3] + taskArray: [task1, task2, task3] }); testTaskparallel.trigger().then(() => { done(); diff --git a/ts/taskbuffer.classes.helpers.ts b/ts/taskbuffer.classes.helpers.ts index b97c500..0b080d5 100644 --- a/ts/taskbuffer.classes.helpers.ts +++ b/ts/taskbuffer.classes.helpers.ts @@ -1,17 +1,17 @@ import plugins = require("./taskbuffer.plugins"); -import {Task,ITaskFunction} from "./taskbuffer.classes.task"; +import { Task, ITaskFunction } from "./taskbuffer.classes.task"; -export let emptyTaskFunction:ITaskFunction = function(){ +export let emptyTaskFunction: ITaskFunction = function () { let done = plugins.Q.defer(); done.resolve(); return done.promise; }; -export let isTask = function(taskArg):boolean{ - if( +export let isTask = function (taskArg): boolean { + if ( taskArg instanceof Task && typeof taskArg.task === "function" - ){ + ) { return true; } else { return false; @@ -19,32 +19,32 @@ export let isTask = function(taskArg):boolean{ }; -export let isTaskTouched = (taskArg:Task, touchedTasksArray:Task[]):boolean => { +export let isTaskTouched = (taskArg: Task, touchedTasksArray: Task[]): boolean => { let result = false; - for (let keyArg in touchedTasksArray){ - if(taskArg === touchedTasksArray[keyArg]){ + for (let keyArg in touchedTasksArray) { + if (taskArg === touchedTasksArray[keyArg]) { result = true; } } return result; } -export let runTask = function(taskArg:Task,optionsArg:{touchedTasksArray:Task[]} = {touchedTasksArray:[]}){ +export let runTask = function (taskArg: Task, optionsArg: { touchedTasksArray: Task[] } = { touchedTasksArray: [] }) { let done = plugins.Q.defer(); taskArg.running = true; - done.promise.then(function(){taskArg.running = false}); + done.promise.then(function () { taskArg.running = false }); let localDeferred = plugins.Q.defer(); - let touchedTasksArray:Task[]; - if(optionsArg.touchedTasksArray){ + let touchedTasksArray: Task[]; + if (optionsArg.touchedTasksArray) { touchedTasksArray = optionsArg.touchedTasksArray; } else { touchedTasksArray = []; } touchedTasksArray.push(taskArg); localDeferred.promise - .then(() =>{ - if(taskArg.preTask && !isTaskTouched(taskArg.preTask,touchedTasksArray)){ - return runTask(taskArg.preTask,{touchedTasksArray:touchedTasksArray}) + .then(() => { + if (taskArg.preTask && !isTaskTouched(taskArg.preTask, touchedTasksArray)) { + return runTask(taskArg.preTask, { touchedTasksArray: touchedTasksArray }) } else { let done2 = plugins.Q.defer(); done2.resolve(); @@ -55,8 +55,8 @@ export let runTask = function(taskArg:Task,optionsArg:{touchedTasksArray:Task[]} return taskArg.task(); }) .then(() => { - if(taskArg.afterTask && !isTaskTouched(taskArg.afterTask,touchedTasksArray)){ - return runTask(taskArg.afterTask,{touchedTasksArray:touchedTasksArray}) + if (taskArg.afterTask && !isTaskTouched(taskArg.afterTask, touchedTasksArray)) { + return runTask(taskArg.afterTask, { touchedTasksArray: touchedTasksArray }) } else { let done2 = plugins.Q.defer(); done2.resolve(); @@ -70,15 +70,79 @@ export let runTask = function(taskArg:Task,optionsArg:{touchedTasksArray:Task[]} return done.promise; }; -export let runBufferedTask = (taskArg:Task) => { - let recursiveBufferRunner = () => { - if(taskArg.bufferCounter > 0){ - taskArg.runningBuffered = true; - taskArg.bufferCounter--; - runTask(taskArg) - .then(recursiveBufferRunner); - } else { - taskArg.runningBuffered = false; - } + +export interface cycleObject { + cycleCounter:number, + deferred:plugins.Q.Deferred +} + +export class CycleCounter { + task:Task; + cycleObjectArray:cycleObject[] = []; + constructor(taskArg:Task){ + this.task = taskArg; + }; + getPromiseForCycle(cycleCountArg:number){ + let done = plugins.Q.defer(); + let cycleObject:cycleObject = { + cycleCounter:cycleCountArg, + deferred:done + }; + this.cycleObjectArray.push(cycleObject); + return done.promise; + }; + informOfCycle(){ + let newCycleObjectArray:cycleObject[] = []; + this.cycleObjectArray.forEach(cycleObjectArg => { + cycleObjectArg.cycleCounter--; + if(cycleObjectArg.cycleCounter <= 0){ + cycleObjectArg.deferred.resolve(); + } else { + newCycleObjectArray.push(cycleObjectArg); + }; + }); + this.cycleObjectArray = newCycleObjectArray; } +} + +export class BufferRunner { + task:Task; + // initialze by default + bufferCounter:number = 0; + bufferMax:number = 1; + running:boolean = false; + constructor(taskArg: Task) { + this.task = taskArg; + }; + private _run() { + let recursiveBufferRunner = () => { + if (this.bufferCounter >= 0) { + this.running = true; + this.task.running = true; + runTask(this.task) + .then(() => { + this.bufferCounter--; + this.task.cycleCounter.informOfCycle(); + recursiveBufferRunner(); + }); + } else { + this.running = false; + this.task.running = false; + } + }; + recursiveBufferRunner(); + }; + setBufferMax(bufferMaxArg:number){ + this.bufferMax = bufferMaxArg; + }; + trigger(): PromiseLike { + if(!(this.bufferCounter >= this.bufferMax)){ + this.bufferCounter++ + }; + let returnPromise:PromiseLike = this.task.cycleCounter.getPromiseForCycle(this.bufferCounter + 1); + if(!this.running){ + this._run(); + } + return returnPromise; + }; }; \ No newline at end of file diff --git a/ts/taskbuffer.classes.task.ts b/ts/taskbuffer.classes.task.ts index 27a0cfd..1e66295 100644 --- a/ts/taskbuffer.classes.task.ts +++ b/ts/taskbuffer.classes.task.ts @@ -9,17 +9,17 @@ export interface ITaskFunction { export class Task { name:string; task:any; - running:boolean = false; - runningBuffered:boolean = false; - idle:boolean = true; - buffered:boolean = false; - bufferCounter:number; - bufferMax:number = 1; - private _counterTriggerAbsolute:number = 0; - private _state:string; + 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, @@ -32,10 +32,9 @@ export class Task { this.task = optionsArg.taskFunction; this.preTask = options.preTask; this.afterTask = options.afterTask; - this.running = false; - this.idle = !this.running && !this.runningBuffered; + this.idle = !this.running; this.buffered = options.buffered; - this.bufferMax = options.bufferMax; + this.bufferRunner.setBufferMax(options.bufferMax); this.name = options.name; } @@ -58,22 +57,15 @@ export class Task { /** * trigger task unbuffered. */ - triggerUnBuffered(){ + triggerUnBuffered():PromiseLike{ return helpers.runTask(this); } /** * trigger task buffered. */ - triggerBuffered(){ - var done = plugins.Q.defer(); - if(!(this.bufferCounter >= this.bufferMax)){ - this.bufferCounter++ - }; - if(!this.runningBuffered){ - helpers.runBufferedTask(this); - }; - return done.promise; + triggerBuffered():PromiseLike{ + return this.bufferRunner.trigger(); } get state():string {