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-11-28 15:10:15 +00:00
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRpcGMuY2xhc3Nlcy50aHJlYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGlwYy5jbGFzc2VzLnRocmVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDhDQUE2QztBQUM3Qyw0QkFBMkI7QUFJaEIsUUFBQSxjQUFjLEdBQVcsSUFBSSxDQUFBO0FBRTdCLFFBQUEsaUJBQWlCLEdBQUcsQ0FBQyxXQUFtQixFQUFFLEVBQUU7SUFDckQsc0JBQWMsR0FBRyxXQUFXLENBQUE7SUFDNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3pCLFFBQVEsRUFBRTtZQUNSLElBQUksRUFBRSxzQkFBYztTQUNyQjtLQUNGLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQUVEO0lBS0UsWUFBWSxXQUFtQjtRQUYvQixZQUFPLEdBQVksS0FBSyxDQUFBO1FBQ3hCLGlCQUFZLEdBQVMsSUFBSSxDQUFBO1FBRXZCLElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFBO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLENBQUksT0FBWTtRQUNsQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFLLENBQUE7UUFDdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQVUsRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdkIsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsT0FBVSxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN2QixDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRTtZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUSxDQUFJLE9BQU87UUFDakIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBSyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUksT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDckIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ2IsQ0FBQyxDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtJQUN0QixDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQWE7UUFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUE7SUFDN0IsQ0FBQztJQUVPLFVBQVU7UUFDaEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7WUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDdEQsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7WUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDdEQsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTlERCx3QkE4REMifQ==
|