mirror of https://github.com/embarklabs/embark.git
add JS Doc for processLauncher
This commit is contained in:
parent
1ffc9ffe08
commit
d17256dc40
|
@ -1,7 +1,18 @@
|
||||||
const child_process = require('child_process');
|
const child_process = require('child_process');
|
||||||
const constants = require('../constants');
|
const constants = require('../constants');
|
||||||
|
|
||||||
|
|
||||||
class ProcessLauncher {
|
class ProcessLauncher {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor of ProcessLauncher. Forks the module and sets up the message handling
|
||||||
|
* @param {Object} options Options tp start the process
|
||||||
|
* * modulePath {String} Absolute path to the module to fork
|
||||||
|
* * logger {Object} Logger
|
||||||
|
* * normalizeInput {Function} Function to normalize logs
|
||||||
|
* * events {Function} Events Emitter instance
|
||||||
|
* @return {ProcessLauncher} The ProcessLauncher instance
|
||||||
|
*/
|
||||||
constructor(options) {
|
constructor(options) {
|
||||||
this.process = child_process.fork(options.modulePath);
|
this.process = child_process.fork(options.modulePath);
|
||||||
this.logger = options.logger;
|
this.logger = options.logger;
|
||||||
|
@ -12,6 +23,7 @@ class ProcessLauncher {
|
||||||
this._subscribeToMessages();
|
this._subscribeToMessages();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Subscribes to messages from the child process and delegates to the right methods
|
||||||
_subscribeToMessages() {
|
_subscribeToMessages() {
|
||||||
const self = this;
|
const self = this;
|
||||||
this.process.on('message', (msg) => {
|
this.process.on('message', (msg) => {
|
||||||
|
@ -25,6 +37,7 @@ class ProcessLauncher {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Translates logs from the child process to the logger
|
||||||
_handleLog(msg) {
|
_handleLog(msg) {
|
||||||
if (this.logger[msg.type]) {
|
if (this.logger[msg.type]) {
|
||||||
return this.logger[msg.type](this.normalizeInput(msg.message));
|
return this.logger[msg.type](this.normalizeInput(msg.message));
|
||||||
|
@ -32,6 +45,7 @@ class ProcessLauncher {
|
||||||
this.logger.debug(this.normalizeInput(msg.message));
|
this.logger.debug(this.normalizeInput(msg.message));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle event calls from the child process
|
||||||
_handleEvent(msg) {
|
_handleEvent(msg) {
|
||||||
const self = this;
|
const self = this;
|
||||||
if (!self.events[msg.event]) {
|
if (!self.events[msg.event]) {
|
||||||
|
@ -52,6 +66,7 @@ class ProcessLauncher {
|
||||||
self.events[msg.event](msg.requestName, ...msg.args);
|
self.events[msg.event](msg.requestName, ...msg.args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Looks at the subscriptions to see if there is a callback to call
|
||||||
_checkSubscriptions(msg) {
|
_checkSubscriptions(msg) {
|
||||||
const messageKeys = Object.keys(msg);
|
const messageKeys = Object.keys(msg);
|
||||||
const subscriptionsKeys = Object.keys(this.subscriptions);
|
const subscriptionsKeys = Object.keys(this.subscriptions);
|
||||||
|
@ -87,6 +102,13 @@ class ProcessLauncher {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subscribe to a message using a key-value pair
|
||||||
|
* @param {String} key Message key to subscribe to
|
||||||
|
* @param {String} value Value that the above key must have for the callback to be called
|
||||||
|
* @param {Function} callback callback(response)
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
subscribeTo(key, value, callback) {
|
subscribeTo(key, value, callback) {
|
||||||
if (this.subscriptions[key]) {
|
if (this.subscriptions[key]) {
|
||||||
this.subscriptions[key].push(value);
|
this.subscriptions[key].push(value);
|
||||||
|
@ -95,6 +117,13 @@ class ProcessLauncher {
|
||||||
this.subscriptions[key] = [{value, callback}];
|
this.subscriptions[key] = [{value, callback}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unsubscribes from a previously subscribed key-value pair (or key if no value)
|
||||||
|
* @param {String} key Message key to unsubscribe
|
||||||
|
* @param {String} value [Optional] Value of the key to unsubscribe
|
||||||
|
* If there is no value, unsubscribes from all the values of that key
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
unsubscribeTo(key, value) {
|
unsubscribeTo(key, value) {
|
||||||
if (!value) {
|
if (!value) {
|
||||||
this.subscriptions[key] = [];
|
this.subscriptions[key] = [];
|
||||||
|
@ -108,18 +137,38 @@ class ProcessLauncher {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unsubscribes from all subscriptions
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
unsubsribeToAll() {
|
unsubsribeToAll() {
|
||||||
this.subscriptions = {};
|
this.subscriptions = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a message to the child process. Same as ChildProcess.send()
|
||||||
|
* @params {Object} message Message to send
|
||||||
|
* For other parameters, see:
|
||||||
|
* https://nodejs.org/api/child_process.html#child_process_subprocess_send_message_sendhandle_options_callback
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
send() {
|
send() {
|
||||||
this.process.send(...arguments);
|
this.process.send(...arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects the child process. It will exit on its own
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
disconnect() {
|
disconnect() {
|
||||||
this.process.disconnect();
|
this.process.disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Kills the child process
|
||||||
|
* https://nodejs.org/api/child_process.html#child_process_subprocess_kill_signal
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
kill() {
|
kill() {
|
||||||
this.process.kill(...arguments);
|
this.process.kill(...arguments);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue