add JS Doc for processLauncher

This commit is contained in:
Jonathan Rainville 2018-05-16 11:49:38 -04:00
parent 1ffc9ffe08
commit d17256dc40
1 changed files with 49 additions and 0 deletions

View File

@ -1,7 +1,18 @@
const child_process = require('child_process');
const constants = require('../constants');
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) {
this.process = child_process.fork(options.modulePath);
this.logger = options.logger;
@ -12,6 +23,7 @@ class ProcessLauncher {
this._subscribeToMessages();
}
// Subscribes to messages from the child process and delegates to the right methods
_subscribeToMessages() {
const self = this;
this.process.on('message', (msg) => {
@ -25,6 +37,7 @@ class ProcessLauncher {
});
}
// Translates logs from the child process to the logger
_handleLog(msg) {
if (this.logger[msg.type]) {
return this.logger[msg.type](this.normalizeInput(msg.message));
@ -32,6 +45,7 @@ class ProcessLauncher {
this.logger.debug(this.normalizeInput(msg.message));
}
// Handle event calls from the child process
_handleEvent(msg) {
const self = this;
if (!self.events[msg.event]) {
@ -52,6 +66,7 @@ class ProcessLauncher {
self.events[msg.event](msg.requestName, ...msg.args);
}
// Looks at the subscriptions to see if there is a callback to call
_checkSubscriptions(msg) {
const messageKeys = Object.keys(msg);
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) {
if (this.subscriptions[key]) {
this.subscriptions[key].push(value);
@ -95,6 +117,13 @@ class ProcessLauncher {
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) {
if (!value) {
this.subscriptions[key] = [];
@ -108,18 +137,38 @@ class ProcessLauncher {
}
}
/**
* Unsubscribes from all subscriptions
* @return {void}
*/
unsubsribeToAll() {
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() {
this.process.send(...arguments);
}
/**
* Disconnects the child process. It will exit on its own
* @return {void}
*/
disconnect() {
this.process.disconnect();
}
/**
* Kills the child process
* https://nodejs.org/api/child_process.html#child_process_subprocess_kill_signal
* @return {void}
*/
kill() {
this.process.kill(...arguments);
}