2017-01-29 19:50:36 +00:00
|
|
|
"use strict";
|
2017-03-03 19:52:23 +00:00
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
2017-01-29 19:50:36 +00:00
|
|
|
const plugins = require("./smartipc.plugins");
|
|
|
|
const q = require("smartq");
|
2017-03-04 10:40:32 +00:00
|
|
|
exports.workerBasePath = null;
|
2017-01-29 19:50:36 +00:00
|
|
|
exports.setWorkerBasePath = (basePathArg) => {
|
2017-03-04 10:40:32 +00:00
|
|
|
exports.workerBasePath = basePathArg;
|
2017-01-29 19:50:36 +00:00
|
|
|
plugins.threads.config.set({
|
|
|
|
basepath: {
|
2017-03-04 10:40:32 +00:00
|
|
|
node: exports.workerBasePath
|
2017-01-29 19:50:36 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|
|
|
|
class Thread {
|
|
|
|
constructor(filePathArg) {
|
2017-01-29 22:41:26 +00:00
|
|
|
this.running = false;
|
|
|
|
this.assignedPool = null;
|
|
|
|
this.workerPath = filePathArg;
|
2017-01-29 19:50:36 +00:00
|
|
|
}
|
|
|
|
/**
|
|
|
|
* sends a message to the spawned process
|
2017-03-03 19:52:23 +00:00
|
|
|
* spawns it and keeps running
|
2017-01-29 19:50:36 +00:00
|
|
|
*/
|
|
|
|
send(message) {
|
|
|
|
let done = q.defer();
|
2017-01-29 22:41:26 +00:00
|
|
|
this.checkSpawn();
|
|
|
|
this.thread.send(message);
|
|
|
|
this.thread.on('message', (message) => {
|
2017-01-29 19:50:36 +00:00
|
|
|
done.resolve(message);
|
2017-01-29 22:41:26 +00:00
|
|
|
});
|
|
|
|
this.thread.on('done', (job, message) => {
|
|
|
|
done.resolve(message);
|
|
|
|
});
|
|
|
|
this.thread.on('error', err => {
|
2017-01-29 19:50:36 +00:00
|
|
|
done.reject(err);
|
|
|
|
});
|
|
|
|
return done.promise;
|
|
|
|
}
|
2017-03-03 19:52:23 +00:00
|
|
|
/**
|
|
|
|
* sends a command once and then kills the child process
|
|
|
|
*/
|
|
|
|
sendOnce(message) {
|
|
|
|
let done = q.defer();
|
|
|
|
this.send(message).then(message => {
|
|
|
|
done.resolve(message);
|
|
|
|
this.kill();
|
|
|
|
});
|
|
|
|
return done.promise;
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* kills the thread
|
|
|
|
*/
|
2017-01-29 19:50:36 +00:00
|
|
|
kill() {
|
|
|
|
this.thread.kill();
|
2017-01-29 22:41:26 +00:00
|
|
|
this.running = false;
|
|
|
|
}
|
|
|
|
assignToPool(poolArg) {
|
|
|
|
this.assignedPool = poolArg;
|
|
|
|
}
|
|
|
|
checkSpawn() {
|
|
|
|
if (!this.running && !this.assignedPool) {
|
|
|
|
this.running = true;
|
|
|
|
this.thread = plugins.threads.spawn(this.workerPath);
|
|
|
|
}
|
|
|
|
else if (!this.running && this.assignedPool) {
|
|
|
|
this.running = true;
|
|
|
|
this.thread = this.assignedPool.run(this.workerPath);
|
|
|
|
}
|
2017-01-29 19:50:36 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
exports.Thread = Thread;
|
2017-03-04 10:40:32 +00:00
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRpcGMuY2xhc3Nlcy50aHJlYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGlwYy5jbGFzc2VzLnRocmVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDhDQUE2QztBQUM3Qyw0QkFBMkI7QUFJaEIsUUFBQSxjQUFjLEdBQVcsSUFBSSxDQUFBO0FBRTdCLFFBQUEsaUJBQWlCLEdBQUcsQ0FBQyxXQUFtQjtJQUNqRCxzQkFBYyxHQUFHLFdBQVcsQ0FBQTtJQUM1QixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDekIsUUFBUSxFQUFFO1lBQ1IsSUFBSSxFQUFFLHNCQUFjO1NBQ3JCO0tBQ0YsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBRUQ7SUFLRSxZQUFZLFdBQW1CO1FBRi9CLFlBQU8sR0FBWSxLQUFLLENBQUE7UUFDeEIsaUJBQVksR0FBUyxJQUFJLENBQUE7UUFFdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUE7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksQ0FBSSxPQUFZO1FBQ2xCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUssQ0FBQTtRQUN2QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBVTtZQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3ZCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLE9BQVU7WUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN2QixDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHO1lBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDbEIsQ0FBQyxDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRLENBQUksT0FBTztRQUNqQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFLLENBQUE7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBSSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTztZQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNiLENBQUMsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSTtRQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7SUFDdEIsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFhO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFBO0lBQzdCLENBQUM7SUFFTyxVQUFVO1FBQ2hCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO1lBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3RELENBQUM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO1lBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3RELENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUE5REQsd0JBOERDIn0=
|