Revolution/index.js

122 lines
5.2 KiB
JavaScript
Raw Normal View History

const express = require("express"),
fs = require("fs"),
chalk = require("chalk"),
emoji = require("./misc/emoji_list.json");
class reqMod {
constructor(name, status) {
this.name = name;
this.status = status;
}
}
const requiredModules = [
new reqMod("handle_console", false)
];
let config;
2020-01-04 12:08:03 +00:00
// Statup so sync stuff is fine
// Check if config exists
if (fs.existsSync("./config/config.json")) {
2020-01-04 12:08:03 +00:00
// It exists, load it.
config = JSON.parse(fs.readFileSync("./config/config.json"));
} else {
console.log("[Config] Config file doesn't exist! You probably haven't copied the example config in the config directory.");
console.log("[Config] Exiting...");
2020-01-04 12:08:03 +00:00
// It doesn't exist, exit the framework and tell the user what to do
process.exit(1);
}
global.actualDir = __dirname;
global.internals = {
version:"Open Source",
};
2019-11-23 20:33:53 +00:00
global.app = express();
global.modules = [];
let dE = new Date(),
2020-01-04 12:08:03 +00:00
// Get the time at invocation
startTime = dE.getTime(),
endTime,
reqhandler;
2019-08-17 23:33:00 +01:00
// Clear console before printing anything
2019-08-17 23:33:00 +01:00
console.clear();
2020-01-04 12:08:03 +00:00
// Read the server header for output
fs.readFile('./misc/ascii.txt', function(err, data) {
if (err) throw err;
// Generate and Print the banner
console.log(highlightHeader(data));
// Get the modules from the ./modules folder
2019-08-17 23:33:00 +01:00
fs.readdir("./modules", (err, files) => {
if (err) throw err;
2019-08-17 23:33:00 +01:00
for (var i = 0; i < files.length; i++) {
/*
For every file in the array, output that it was found
in the console and attempt to load it using require.
Oh, and check that it has .js in it's file name!
*/
try {
2020-01-04 12:08:03 +00:00
// Make sure the file has the extention of .js
if (files[i].includes(".js")) {
console.log(`[Modules] Found module ${files[i].toString()}`);
2019-11-23 21:11:47 +00:00
global.modules[files[i].toString().replace(".js", "")] = require(`./modules/${files[i].toString()}`);
// Loop through and set the required modules flags
for (var i1 = 0; i1 < requiredModules.length; i1++) {
if (global.modules[files[i].toString().replace(".js", "")].MOD_FUNC == requiredModules[i1].name) {
requiredModules[i1].status = true;
}
}
// We want to find out what the request handler module is
if (global.modules[files[i].toString().replace(".js", "")].MOD_FUNC == "handle_requests") {
2019-11-23 20:35:14 +00:00
// Set reqhandler to the request handler for easy getting
reqhandler = global.modules[files[i].toString().replace(".js", "")];
}
} else {
if (files[i].split(".").length < 2) continue;
console.log(`[Modules] Found file ${files[i]}. It is not a module.`)
}
} catch (err) {
console.log(chalk.bgRed(` ! [Modules] There was an issue loading ${files[i]} ! `));
console.log(chalk.bgRed(` ! [Modules] ${err} ! `));
}
2019-08-17 23:33:00 +01:00
}
// Check if all the required modules flags are set
let allRequiredExist = [];
for (var i = 0; i < requiredModules.length; i++) {
2020-01-04 12:08:03 +00:00
// Push the status of the required modules to an array
2020-01-03 01:05:31 +00:00
allRequiredExist.push(requiredModules[i].status);
}
2020-01-04 12:08:03 +00:00
// Make sure all required modules are found
if (allRequiredExist.length !== requiredModules.length) {
2020-01-04 12:08:03 +00:00
// They are not all found, exit framework with code 1.
console.log("[Modules] All required modules could not be found.");
console.log("[Modules] Server will not start until all required modules are found.");
process.exit(1);
} else {
2020-01-04 12:08:03 +00:00
// All required modules are found, start the framework's server.
global.modules.consoleHelper.printInfo(emoji.wave, "Starting Revolution...");
server();
}
2019-08-17 23:33:00 +01:00
});
});
function server() {
2020-01-04 12:08:03 +00:00
// Load in the request handler's extra required items.
2019-11-23 20:33:53 +00:00
reqhandler.extras();
2020-01-04 12:08:03 +00:00
// Define where GET requests go to in the request handlers.
app.get('*', (req, res) => reqhandler.get(req, res));
2020-01-04 12:08:03 +00:00
// Define where POST requests go to in the request handlers.
app.post('*', (req, res) => reqhandler.post(req, res));
2020-01-04 12:08:03 +00:00
// Start the server listening at the port defined in the config file
app.listen(config.server.port, () => {
dE = new Date(),
2020-01-04 12:08:03 +00:00
// Get time after server has started listening or the "end time".
endTime = dE.getTime();
global.modules.consoleHelper.printInfo(emoji.thumb_up, `Started Revolution on port ${config.server.port}! Took ${endTime - startTime}ms`);
2019-08-17 23:33:00 +01:00
});
}
function highlightHeader(s) {
// Add the appropriate colours to the header and add information to it
const s1 = s.toString().replace("|replaceVersion|", `${chalk.yellow("Version:")} ${chalk.cyan(internals.version)}`)
.replace("|titlecard|", chalk.yellow("A modular and fexible server"))
.replace("|replaceType|", `${chalk.yellow("Instance: ")}${chalk.cyan(config.server.instance_type)}`);
return s1;
2019-08-17 23:33:00 +01:00
}