2016-05-04 02:28:50 +00:00
|
|
|
"use strict";
|
2016-07-31 22:53:27 +00:00
|
|
|
const plugins = require("./taskbuffer.plugins");
|
|
|
|
const taskbuffer_classes_task_1 = require("./taskbuffer.classes.task");
|
2016-08-02 09:09:42 +00:00
|
|
|
exports.emptyTaskFunction = function (x) {
|
2017-01-19 16:26:35 +00:00
|
|
|
let done = plugins.q.defer();
|
2016-05-04 00:49:43 +00:00
|
|
|
done.resolve();
|
|
|
|
return done.promise;
|
|
|
|
};
|
2016-05-04 02:28:50 +00:00
|
|
|
exports.isTask = function (taskArg) {
|
2016-05-15 13:28:38 +00:00
|
|
|
if (taskArg instanceof taskbuffer_classes_task_1.Task
|
2017-01-19 16:26:35 +00:00
|
|
|
&& typeof taskArg.taskFunction === "function") {
|
2016-05-04 02:28:50 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
};
|
2016-07-31 22:53:27 +00:00
|
|
|
exports.isTaskTouched = (taskArg, touchedTasksArray) => {
|
|
|
|
let result = false;
|
|
|
|
for (let keyArg in touchedTasksArray) {
|
2016-05-06 00:05:45 +00:00
|
|
|
if (taskArg === touchedTasksArray[keyArg]) {
|
|
|
|
result = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return result;
|
2016-05-05 16:36:31 +00:00
|
|
|
};
|
2016-08-02 09:09:42 +00:00
|
|
|
exports.runTask = function (taskArg, optionsArg) {
|
2017-01-19 16:26:35 +00:00
|
|
|
let done = plugins.q.defer();
|
2016-08-02 09:09:42 +00:00
|
|
|
// set running params
|
2016-08-01 11:17:15 +00:00
|
|
|
taskArg.running = true;
|
|
|
|
done.promise.then(function () { taskArg.running = false; });
|
2016-08-02 09:09:42 +00:00
|
|
|
// handle options
|
|
|
|
let options = plugins.lodash.merge({ x: undefined, touchedTasksArray: [] }, optionsArg);
|
|
|
|
let x = options.x;
|
|
|
|
let touchedTasksArray = options.touchedTasksArray;
|
2016-05-05 16:36:31 +00:00
|
|
|
touchedTasksArray.push(taskArg);
|
2016-08-02 09:09:42 +00:00
|
|
|
// run the task cascade
|
2017-01-19 16:26:35 +00:00
|
|
|
let localDeferred = plugins.q.defer();
|
2016-05-05 16:36:31 +00:00
|
|
|
localDeferred.promise
|
2016-07-31 22:53:27 +00:00
|
|
|
.then(() => {
|
2016-05-05 16:36:31 +00:00
|
|
|
if (taskArg.preTask && !exports.isTaskTouched(taskArg.preTask, touchedTasksArray)) {
|
2016-08-02 09:09:42 +00:00
|
|
|
return exports.runTask(taskArg.preTask, { x: x, touchedTasksArray: touchedTasksArray });
|
2016-05-05 16:36:31 +00:00
|
|
|
}
|
|
|
|
else {
|
2017-01-19 16:26:35 +00:00
|
|
|
let done2 = plugins.q.defer();
|
2016-08-02 09:09:42 +00:00
|
|
|
done2.resolve(x);
|
2016-05-05 16:36:31 +00:00
|
|
|
return done2.promise;
|
|
|
|
}
|
|
|
|
})
|
2016-08-02 09:09:42 +00:00
|
|
|
.then(x => {
|
|
|
|
return taskArg.taskFunction(x);
|
2016-05-05 16:36:31 +00:00
|
|
|
})
|
2016-08-02 09:09:42 +00:00
|
|
|
.then(x => {
|
2016-05-05 16:36:31 +00:00
|
|
|
if (taskArg.afterTask && !exports.isTaskTouched(taskArg.afterTask, touchedTasksArray)) {
|
2016-08-02 09:09:42 +00:00
|
|
|
return exports.runTask(taskArg.afterTask, { x: x, touchedTasksArray: touchedTasksArray });
|
2016-05-05 16:36:31 +00:00
|
|
|
}
|
|
|
|
else {
|
2017-01-19 16:26:35 +00:00
|
|
|
let done2 = plugins.q.defer();
|
2016-08-02 09:09:42 +00:00
|
|
|
done2.resolve(x);
|
2016-05-05 16:36:31 +00:00
|
|
|
return done2.promise;
|
|
|
|
}
|
|
|
|
})
|
2016-08-02 09:09:42 +00:00
|
|
|
.then(x => {
|
|
|
|
done.resolve(x);
|
2016-08-03 09:28:13 +00:00
|
|
|
}).catch((err) => {
|
|
|
|
console.log(err);
|
2016-05-05 16:36:31 +00:00
|
|
|
});
|
2016-05-06 00:05:45 +00:00
|
|
|
localDeferred.resolve();
|
2016-05-04 00:49:43 +00:00
|
|
|
return done.promise;
|
|
|
|
};
|
2016-08-01 14:10:00 +00:00
|
|
|
class CycleCounter {
|
|
|
|
constructor(taskArg) {
|
|
|
|
this.cycleObjectArray = [];
|
|
|
|
this.task = taskArg;
|
|
|
|
}
|
|
|
|
;
|
|
|
|
getPromiseForCycle(cycleCountArg) {
|
2017-01-19 16:26:35 +00:00
|
|
|
let done = plugins.q.defer();
|
2016-08-01 14:10:00 +00:00
|
|
|
let cycleObject = {
|
|
|
|
cycleCounter: cycleCountArg,
|
|
|
|
deferred: done
|
|
|
|
};
|
|
|
|
this.cycleObjectArray.push(cycleObject);
|
|
|
|
return done.promise;
|
|
|
|
}
|
|
|
|
;
|
2016-08-03 12:51:43 +00:00
|
|
|
informOfCycle(x) {
|
2016-08-01 14:10:00 +00:00
|
|
|
let newCycleObjectArray = [];
|
|
|
|
this.cycleObjectArray.forEach(cycleObjectArg => {
|
|
|
|
cycleObjectArg.cycleCounter--;
|
|
|
|
if (cycleObjectArg.cycleCounter <= 0) {
|
2016-08-03 12:51:43 +00:00
|
|
|
cycleObjectArg.deferred.resolve(x);
|
2016-08-01 14:10:00 +00:00
|
|
|
}
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
;
|
2016-08-02 09:09:42 +00:00
|
|
|
_run(x) {
|
|
|
|
let recursiveBufferRunner = (x) => {
|
2016-08-01 14:10:00 +00:00
|
|
|
if (this.bufferCounter >= 0) {
|
|
|
|
this.running = true;
|
|
|
|
this.task.running = true;
|
2016-08-02 09:09:42 +00:00
|
|
|
exports.runTask(this.task, { x: x })
|
|
|
|
.then((x) => {
|
2016-08-01 14:10:00 +00:00
|
|
|
this.bufferCounter--;
|
2016-08-03 12:51:43 +00:00
|
|
|
this.task.cycleCounter.informOfCycle(x);
|
2016-08-02 09:09:42 +00:00
|
|
|
recursiveBufferRunner(x);
|
2016-08-01 14:10:00 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
this.running = false;
|
|
|
|
this.task.running = false;
|
|
|
|
}
|
|
|
|
};
|
2016-08-02 09:09:42 +00:00
|
|
|
recursiveBufferRunner(x);
|
2016-08-01 14:10:00 +00:00
|
|
|
}
|
|
|
|
;
|
|
|
|
setBufferMax(bufferMaxArg) {
|
|
|
|
this.bufferMax = bufferMaxArg;
|
|
|
|
}
|
|
|
|
;
|
2016-08-02 09:09:42 +00:00
|
|
|
trigger(x) {
|
2016-08-01 14:10:00 +00:00
|
|
|
if (!(this.bufferCounter >= this.bufferMax)) {
|
|
|
|
this.bufferCounter++;
|
2016-05-06 00:05:45 +00:00
|
|
|
}
|
2016-08-01 14:10:00 +00:00
|
|
|
;
|
|
|
|
let returnPromise = this.task.cycleCounter.getPromiseForCycle(this.bufferCounter + 1);
|
|
|
|
if (!this.running) {
|
2016-08-02 09:09:42 +00:00
|
|
|
this._run(x);
|
2016-08-01 11:17:15 +00:00
|
|
|
}
|
2016-08-01 14:10:00 +00:00
|
|
|
return returnPromise;
|
|
|
|
}
|
|
|
|
;
|
|
|
|
}
|
|
|
|
exports.BufferRunner = BufferRunner;
|
|
|
|
;
|
2017-01-19 16:26:35 +00:00
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza2J1ZmZlci5jbGFzc2VzLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXNrYnVmZmVyLmNsYXNzZXMuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsZ0RBQWlEO0FBQ2pELHVFQUFnRTtBQUVyRCxRQUFBLGlCQUFpQixHQUFrQixVQUFVLENBQUM7SUFDckQsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDLENBQUM7QUFFUyxRQUFBLE1BQU0sR0FBRyxVQUFVLE9BQWE7SUFDdkMsRUFBRSxDQUFDLENBQ0MsT0FBTyxZQUFZLDhCQUFJO1dBQ3BCLE9BQU8sT0FBTyxDQUFDLFlBQVksS0FBSyxVQUN2QyxDQUFDLENBQUMsQ0FBQztRQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ0osTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqQixDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBR1MsUUFBQSxhQUFhLEdBQUcsQ0FBQyxPQUFhLEVBQUUsaUJBQXlCO0lBQ2hFLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDbkMsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7SUFDTCxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUE7QUFFVSxRQUFBLE9BQU8sR0FBRyxVQUFVLE9BQWEsRUFBRSxVQUE2QztJQUN2RixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRTdCLHNCQUFzQjtJQUN0QixPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFM0QsaUJBQWlCO0lBQ2pCLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUM5QixFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsaUJBQWlCLEVBQUUsRUFBRSxFQUFDLEVBQ25DLFVBQVUsQ0FDYixDQUFBO0lBQ0QsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsQixJQUFJLGlCQUFpQixHQUFXLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztJQUUxRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFaEMsdUJBQXVCO0lBQ3ZCLElBQUksYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEMsYUFBYSxDQUFDLE9BQU87U0FDaEIsSUFBSSxDQUFDO1FBQ0YsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLHFCQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RSxNQUFNLENBQUMsZUFBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQTtRQUNqRixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDekIsQ0FBQztJQUNMLENBQUMsQ0FBQztTQUNELElBQUksQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLENBQUMscUJBQWEsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUc7UUFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQVFGO0lBR0ksWUFBWSxPQUFZO1FBRHhCLHFCQUFnQixHQUFpQixFQUFFLENBQUM7UUFFaEMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUFBLENBQUM7SUFDRixrQkFBa0IsQ0FBQyxhQUFvQjtRQUNuQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksV0FBVyxHQUFlO1lBQzFCLFlBQVksRUFBQyxhQUFhO1lBQzFCLFFBQVEsRUFBQyxJQUFJO1NBQ2hCLENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFBQSxDQUFDO0lBQ0YsYUFBYSxDQUFDLENBQUM7UUFDWCxJQUFJLG1CQUFtQixHQUFpQixFQUFFLENBQUM7UUFDM0MsSUFBSSxDQ
|