// Modules const { promisify } = require('util'); const { exec } = require("child_process"); // Debug const { DebugBuilder } = require("../utilities/debugBuilder.js"); // Global Vars const log = new DebugBuilder("client", "executeConsoleCommands"); const execCommand = promisify(exec); /** * * @param {*} process The process to close * @returns {undefined} Undefined to replace the existing process in the parent */ exports.closeProcessWrapper = async (process) => { log.INFO("Leaving the server"); if (!process) return undefined; // Try to close the process gracefully await process.kill(2); // Wait 25 seconds and see if the process is still open, if it is force it close await setTimeout(async () => { if (process) await process.kill(9); }, 25000) return undefined; } /** * * @param {*} consoleCommand * @returns */ exports.executeAsyncConsoleCommand = async function executeAsyncConsoleCommand(consoleCommand) { // Check to see if the command is a real command // TODO needs to be improved const acceptableCommands = [ "arecord -L", 'ipconfig', 'ip addr' ]; if (!acceptableCommands.includes(consoleCommand)) { log.WARN("Console command is not acceptable: ", consoleCommand); return undefined; } log.DEBUG("Running console command: ", consoleCommand); const tempOutput = await execCommand(consoleCommand); const output = tempOutput.stdout.trim(); log.DEBUG("Executed Console Command Response: ", output) // TODO add some error checking return output; } /** * */ class nodeObject { /** * * @param {*} param0._id The ID of the node * @param {*} param0._name The name of the node * @param {*} param0._ip The IP that the master can contact the node at * @param {*} param0._port The port that the client is listening on * @param {*} param0._location The physical location of the node * @param {*} param0._online An integer representation of the online status of the bot, ie 0=off, 1=on * @param {*} param0._nearbySystems An object array of nearby systems */ constructor({ _id = null, _name = null, _ip = null, _port = null, _location = null, _nearbySystems = null, _online = null }) { this.id = _id; this.name = _name; this.ip = _ip; this.port = _port; this.location = _location; this.nearbySystems = _nearbySystems; this.online = _online; } } exports.nodeObject = nodeObject;