81 lines
2.5 KiB
JavaScript
81 lines
2.5 KiB
JavaScript
// 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; |