Major update
- Working client server interactions - Can create radio config - Needs radio testing
This commit is contained in:
68
Server/utilities/httpRequests.js
Normal file
68
Server/utilities/httpRequests.js
Normal file
@@ -0,0 +1,68 @@
|
||||
// Debug
|
||||
const { DebugBuilder } = require("../utilities/debugBuilder.js");
|
||||
const log = new DebugBuilder("server", "httpRequests");
|
||||
// Modules
|
||||
const http = require("http");
|
||||
|
||||
exports.requestOptions = class requestOptions {
|
||||
/**
|
||||
* Construct an HTTP request
|
||||
* @param {*} method Method of request to use [GET, POST]
|
||||
* @param {*} headers Headers of the request, not required but will get filled with default values if not set
|
||||
* @param {*} hostname The destination of the request
|
||||
* @param {*} port The port for the destination, will use 3001 by default
|
||||
*/
|
||||
constructor(path, method, hostname, port = 3001, headers = undefined, timeout = undefined) {
|
||||
this.hostname = hostname;
|
||||
this.path = path;
|
||||
this.port = port;
|
||||
this.method = method;
|
||||
this.timeout = timeout;
|
||||
if (method === "POST"){
|
||||
this.headers = headers ?? {
|
||||
'Content-Type': 'application/json',
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the HTTP request to the server
|
||||
* @param requestOptions
|
||||
* @param data
|
||||
* @param callback
|
||||
*/
|
||||
exports.sendHttpRequest = function sendHttpRequest(requestOptions, data, callback){
|
||||
log.DEBUG("Sending a request to: ", requestOptions.hostname, requestOptions.port)
|
||||
// Create the request
|
||||
const req = http.request(requestOptions, res => {
|
||||
res.on('data', (data) => {
|
||||
const responseObject = {
|
||||
"statusCode": res.statusCode,
|
||||
"body": data
|
||||
};
|
||||
|
||||
try {
|
||||
responseObject.body = JSON.parse(responseObject.body)
|
||||
}
|
||||
catch (err) {
|
||||
}
|
||||
|
||||
log.DEBUG("Response Object: ", responseObject);
|
||||
callback(responseObject);
|
||||
})
|
||||
}).on('error', err => {
|
||||
log.ERROR('Error: ', err.message)
|
||||
// TODO need to handle if the server is down
|
||||
})
|
||||
|
||||
if (requestOptions.timeout) {
|
||||
req.setTimeout(requestOptions.timeout, () => {
|
||||
callback(false);
|
||||
});
|
||||
}
|
||||
|
||||
// Write the data to the request and send it
|
||||
req.write(data)
|
||||
req.end()
|
||||
}
|
||||
@@ -13,7 +13,9 @@ const nodesTable = `${databaseConfig.database_database}.nodes`;
|
||||
|
||||
connection.connect()
|
||||
|
||||
// Get all nodes the server knows about regardless of status
|
||||
/** Get all nodes the server knows about regardless of status
|
||||
* @param {*} callback Callback function
|
||||
*/
|
||||
exports.getAllNodes = (callback) => {
|
||||
const sqlQuery = `SELECT * FROM ${nodesTable}`
|
||||
runSQL(sqlQuery, (rows) => {
|
||||
@@ -21,7 +23,9 @@ exports.getAllNodes = (callback) => {
|
||||
})
|
||||
}
|
||||
|
||||
// Get all nodes that have the online status set true (are online)
|
||||
/** Get all nodes that have the online status set true (are online)
|
||||
* @param callback Callback function
|
||||
*/
|
||||
exports.getOnlineNodes = (callback) => {
|
||||
const sqlQuery = `SELECT * FROM ${nodesTable} WHERE online = 1;`
|
||||
runSQL(sqlQuery, (rows) => {
|
||||
@@ -29,7 +33,10 @@ exports.getOnlineNodes = (callback) => {
|
||||
})
|
||||
}
|
||||
|
||||
// Get info on a node based on ID
|
||||
/** Get info on a node based on ID
|
||||
* @param nodeId The ID of the node
|
||||
* @param callback Callback function
|
||||
*/
|
||||
exports.getNodeInfoFromId = (nodeId, callback) => {
|
||||
const sqlQuery = `SELECT * FROM ${nodesTable} WHERE id = ${nodeId}`
|
||||
runSQL(sqlQuery, (rows) => {
|
||||
@@ -39,7 +46,10 @@ exports.getNodeInfoFromId = (nodeId, callback) => {
|
||||
})
|
||||
}
|
||||
|
||||
// Add a new node to the DB
|
||||
/** Add a new node to the DB
|
||||
* @param nodeObject Node information object
|
||||
* @param callback Callback function
|
||||
*/
|
||||
exports.addNewNode = (nodeObject, callback) => {
|
||||
if (!nodeObject.name) throw new Error("No name provided");
|
||||
const name = nodeObject.name,
|
||||
@@ -55,7 +65,10 @@ exports.addNewNode = (nodeObject, callback) => {
|
||||
})
|
||||
}
|
||||
|
||||
// Update the known info on a node
|
||||
/** Update the known info on a node
|
||||
* @param nodeObject Node information object
|
||||
* @param callback Callback function
|
||||
*/
|
||||
exports.updateNodeInfo = (nodeObject, callback) => {
|
||||
const name = nodeObject.name,
|
||||
ip = nodeObject.ip,
|
||||
|
||||
@@ -6,4 +6,14 @@ exports.JsonToBuffer = (jsonObject) => {
|
||||
// Convert a buffer from the DB to JSON object
|
||||
exports.BufferToJson = (buffer) => {
|
||||
return JSON.parse(buffer.toString());
|
||||
}
|
||||
}
|
||||
|
||||
/** Find a key in an object by its value
|
||||
*
|
||||
* @param {*} object The object to search
|
||||
* @param {*} value The value to search the arrays in the object for
|
||||
* @returns The key of the object that contains the value
|
||||
*/
|
||||
exports.getKeyByArrayValue = (object, value) => {
|
||||
return Object.keys(object).find(key => object[key].includes(value));
|
||||
}
|
||||
Reference in New Issue
Block a user