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 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);
} }