Files
DRB-CnC/Client/controllers/radioController.js
2023-05-20 15:18:50 -04:00

74 lines
2.6 KiB
JavaScript

// Debug
const { DebugBuilder } = require("../utilities/debugBuilder.js");
const log = new DebugBuilder("client", "radioController");
// Modules
require('dotenv').config();
const { closeProcessWrapper, changeCurrentConfigWrapper, openRadioSessionWrapper } = require("../utilities/utilities");
let radioChildProcess;
/**
* Closes the radio executable if it's in one
*/
exports.closeRadioSession = async (req, res) => {
if (!radioChildProcess || !req.body.radioSession) return res.sendStatus(204);
if (radioChildProcess) radioChildProcess = await closeProcessWrapper(radioChildProcess);
if (req.body.radioSession) req.body.radioSession = await closeProcessWrapper(req.body.radioSession);
if (!radioChildProcess) return res.sendStatus(200);
}
/**
* Change the current 'cfg.json' file to the preset specified
* @param {string} presetName
*/
exports.changeCurrentConfig = async (req, res) => {
const presetName = req.body.presetName;
if (!presetName) return res.status(500).json("You must include the preset name")
const updatedConfigObject = await changeCurrentConfigWrapper(presetName);
// No change was made to the config
if (!updatedConfigObject) return res.sendStatus(200);
// Error was encountered
if (typeof updatedConfigObject === "string") return res.status(500).json(updatedConfigObject);
// There was a change made to the config, reopening the radio session if it was open
if (radioChildProcess) {
log.DEBUG("Radio session open, restarting to accept the new config");
const radioSessionResult = await openRadioSessionWrapper(radioChildProcess, presetName);
// throw an error to the client if the wrapper ran into an error
if (typeof radioSessionResult === "string") return res.status(500).json(updatedConfigObject);
}
return res.sendStatus(202);
}
/**
* Open a new OP25 process tuned to the specified system
*/
exports.openRadioSession = async (req, res) => {
const presetName = req.body.presetName;
if(!presetName) return res.status(500).json({"message": "You must include the preset name to start the radio session with"})
radioChildProcess = await openRadioSessionWrapper(radioChildProcess, presetName);
// throw an error to the client if the wrapper ran into an error
if (typeof radioSessionResult === "string") return res.status(500).json(updatedConfigObject);
return res.sendStatus(200);
}
/**
* Attach the radio session to the request to be used elsewhere
*
* @param {*} req
* @param {*} res
*/
exports.attachRadioSessionToRequest = async (req, res, next) => {
req.body.radioSession = radioChildProcess;
next();
}