From 64edc612dffaeebb7abc69ef54db8de9a6c4fbe3 Mon Sep 17 00:00:00 2001 From: Logan Cusano Date: Sun, 24 Mar 2024 19:09:17 -0400 Subject: [PATCH] #10 - Implemented a new param for launching client processes to wait for the process to close - Waiting for the bash script to finish before restarting the application --- client/modules/selfUpdater.mjs | 2 +- client/modules/subprocessHandler.mjs | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/client/modules/selfUpdater.mjs b/client/modules/selfUpdater.mjs index 0d13089..080bab3 100644 --- a/client/modules/selfUpdater.mjs +++ b/client/modules/selfUpdater.mjs @@ -34,7 +34,7 @@ export const checkForUpdates = async () => { // Run the post-update script console.log('Running post-update script...'); - await launchProcess("bash", ['./post-update.sh']); + await launchProcess("bash", ['./post-update.sh'], true); // Restart the application to apply the updates console.log('Update completed successfully. Restarting the application...'); diff --git a/client/modules/subprocessHandler.mjs b/client/modules/subprocessHandler.mjs index 43e4c70..18909e8 100644 --- a/client/modules/subprocessHandler.mjs +++ b/client/modules/subprocessHandler.mjs @@ -10,20 +10,28 @@ const runningProcesses = {}; * Launches a new process if it's not already running. * @param {string} processName - The name of the process to launch. * @param {string[]} args - The arguments to pass to the process. + * @param {boolean} waitForClose - Set this to wait to return until the process exits */ -export const launchProcess = (processName, args) => { +export const launchProcess = (processName, args, waitForClose=false) => { if (!runningProcesses[processName]) { const childProcess = spawn(processName, args); // Store reference to the spawned process runningProcesses[processName] = childProcess; - childProcess.on('exit', (code, signal) => { - // Remove reference to the process when it exits - delete runningProcesses[processName]; - console.log(`${processName} process exited with code ${code} and signal ${signal}`); + code = new Promise(res => { + childProcess.on('exit', (code, signal) => { + // Remove reference to the process when it exits + delete runningProcesses[processName]; + console.log(`${processName} process exited with code ${code} and signal ${signal}`); + res(code); + }) }); + if (waitForClose === true) { + return code + } + console.log(`${processName} process started.`); } else { console.log(`${processName} process is already running.`);