Make the code more sane and improve the modularity of Revolution
This commit is contained in:
parent
e042f3e4dd
commit
3b891869b8
6 changed files with 129 additions and 92 deletions
71
index.js
71
index.js
|
@ -1,27 +1,26 @@
|
||||||
const express = require("express"), app = express(), fs = require("fs"), chalk = require("chalk"), config = require("./config/config.json"), emoji = require("./misc/emoji_list.json"),
|
const express = require("express"),
|
||||||
internals = {
|
app = express(),
|
||||||
version:"0.0.4 RELEASE",
|
fs = require("fs"),
|
||||||
types: {
|
chalk = require("chalk"),
|
||||||
a:"INFO",
|
config = require("./config/config.json"),
|
||||||
b:"REQUEST",
|
emoji = require("./misc/emoji_list.json");
|
||||||
c:"WARN"
|
global.actualDir = __dirname;
|
||||||
}
|
global.internals = {
|
||||||
|
version:"Open Source",
|
||||||
};
|
};
|
||||||
let dE = new Date(), startTime = dE.getTime(), endTime, modules = [];
|
global.modules = [];
|
||||||
|
let dE = new Date(),
|
||||||
|
startTime = dE.getTime(),
|
||||||
|
endTime,
|
||||||
|
reqhandler;
|
||||||
|
|
||||||
// Clear console before printing anything
|
// Clear console before printing anything
|
||||||
console.clear();
|
console.clear();
|
||||||
|
|
||||||
fs.readFile('./misc/ascii.txt', function(err, data) {
|
fs.readFile('./misc/ascii.txt', function(err, data) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
// Generate the banner
|
// Generate and Print the banner
|
||||||
let asciiOut = data.toString()
|
console.log(highlightHeader(data));
|
||||||
.replace("|replaceVersion|", `${chalk.yellow("Version:")} ${chalk.cyan(internals.version)}`)
|
|
||||||
.replace("|titlecard|", chalk.yellow("The web server made for EUS"))
|
|
||||||
.replace("DEV", chalk.red("DEV")).replace("RELEASE", chalk.green("RELEASE"))
|
|
||||||
.replace("|replaceType|", `${chalk.yellow("Type: ")}${chalk.cyan(config.server.instance_type)}`);
|
|
||||||
// Print the banner
|
|
||||||
console.log(asciiOut);
|
|
||||||
// Get the modules from the ./modules folder
|
// Get the modules from the ./modules folder
|
||||||
fs.readdir("./modules", (err, files) => {
|
fs.readdir("./modules", (err, files) => {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
|
@ -31,21 +30,41 @@ fs.readFile('./misc/ascii.txt', function(err, data) {
|
||||||
in the console and attempt to load it using require.
|
in the console and attempt to load it using require.
|
||||||
Oh, and check that it has .js in it's file name!
|
Oh, and check that it has .js in it's file name!
|
||||||
*/
|
*/
|
||||||
if (files[i].includes(".js")) {
|
try {
|
||||||
modules[files[i].toString().replace(".js", "")] = require(`./modules/${files[i].toString()}`);
|
if (files[i].includes(".js")) {
|
||||||
console.log(`[Modules] Found module ${files[i].toString()}`);
|
global.modules[files[i].toString().replace(".js", "")] = require(`./modules/${files[i].toString()}`);
|
||||||
} else {
|
console.log(`[Modules] Found module ${files[i].toString()}`);
|
||||||
console.log(`[Modules] Found file ${files[i]}. It is not a module.`)
|
// We want to find out what the request handler module is
|
||||||
|
if (global.modules[files[i].toString().replace(".js", "")].MOD_FUNC == "handle_requests") {
|
||||||
|
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} ! `));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
modules.logger.log(internals.types.a, emoji.wave, "Starting Revolution...");
|
global.modules.consoleHelper.printInfo(emoji.wave, "Starting Revolution...");
|
||||||
server();
|
server();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function server() {
|
function server() {
|
||||||
app.get('*', (req, res) => { modules.request_handler.handle(modules, internals, emoji, req, res); });
|
app.get('*', (req, res) => reqhandler.get(req, res));
|
||||||
app.listen(config.server.port, () => { dE = new Date(), endTime = dE.getTime();
|
app.post('*', (req, res) => reqhandler.post(req, res));
|
||||||
modules.logger.log(internals.types.a, emoji.thumb_up, `Started Revolution on port ${config.server.port}! Took ${endTime - startTime}ms`);
|
app.listen(config.server.port, () => {
|
||||||
|
dE = new Date(),
|
||||||
|
endTime = dE.getTime();
|
||||||
|
global.modules.consoleHelper.printInfo(emoji.thumb_up, `Started Revolution on port ${config.server.port}! Took ${endTime - startTime}ms`);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function highlightHeader(s) {
|
||||||
|
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;
|
||||||
}
|
}
|
|
@ -5,5 +5,6 @@
|
||||||
"dizzy":"😵",
|
"dizzy":"😵",
|
||||||
"heavy_check":"✔️",
|
"heavy_check":"✔️",
|
||||||
"folder":"📁",
|
"folder":"📁",
|
||||||
"fast_up":"⏫"
|
"fast_up":"⏫",
|
||||||
|
"cross":"❌"
|
||||||
}
|
}
|
36
modules/consoleHelper.js
Normal file
36
modules/consoleHelper.js
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
const chalk = require("chalk");
|
||||||
|
|
||||||
|
// Defines the function of this module
|
||||||
|
const MODULE_FUNCTION = "handle_console",
|
||||||
|
|
||||||
|
// Base path for module folder creation and navigation
|
||||||
|
BASE_PATH = null;
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
printInfo:function(emoji, s) {
|
||||||
|
console.log(chalk.green(`[${this.getTime24()}] `)+chalk.bgGreen(chalk.black(" INFO "))+` ${emoji} ${s}`);
|
||||||
|
},
|
||||||
|
|
||||||
|
printWarn:function(emoji, s) {
|
||||||
|
console.warn(chalk.green(`[${this.getTime24()}] `)+chalk.bgYellow(chalk.black(" WARN "))+` ${emoji} ${s}`);
|
||||||
|
},
|
||||||
|
|
||||||
|
printError:function(emoji, s) {
|
||||||
|
console.error(chalk.green(`[${this.getTime24()}] `)+chalk.bgRed(chalk.black(" ERROR "))+` ${emoji} ${s}`);
|
||||||
|
},
|
||||||
|
|
||||||
|
getTime24:function() {
|
||||||
|
const time = new Date();
|
||||||
|
return `${correctValue(time.getHours())}:${correctValue(time.getMinutes())}:${correctValue(time.getSeconds())}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.MOD_FUNC = MODULE_FUNCTION;
|
||||||
|
|
||||||
|
function correctValue(i) {
|
||||||
|
if (i < 10) {
|
||||||
|
return "0"+i;
|
||||||
|
} else {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
46
modules/example_request_handler.js
Normal file
46
modules/example_request_handler.js
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
const fs = require("fs"),
|
||||||
|
emoji = require("../misc/emoji_list.json");
|
||||||
|
|
||||||
|
// Defines the function of this module
|
||||||
|
const MODULE_FUNCTION = "handle_requests",
|
||||||
|
|
||||||
|
// Base path for module folder creation and navigation
|
||||||
|
BASE_PATH = "/example_request_handler";
|
||||||
|
|
||||||
|
// Only ran on startup so using sync functions is fine
|
||||||
|
// Makes the folders for files of the module
|
||||||
|
if (!fs.existsSync(__dirname + BASE_PATH)) {
|
||||||
|
fs.mkdirSync(__dirname + BASE_PATH);
|
||||||
|
}
|
||||||
|
if (!fs.existsSync(__dirname + BASE_PATH + "/files")) {
|
||||||
|
fs.mkdirSync(__dirname + BASE_PATH + "/files");
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
get:function(req, res) {
|
||||||
|
/*
|
||||||
|
req - Request from client
|
||||||
|
res - Response from server
|
||||||
|
*/
|
||||||
|
|
||||||
|
fs.access(__dirname + BASE_PATH + "/files" + req.url, fs.F_OK, error => {
|
||||||
|
if (error) {
|
||||||
|
global.modules.consoleHelper.printWarn(emoji.page, `${req.method}: ${req.url} was requested - Returned 404`);
|
||||||
|
res.status(404).send("404!<hr>Revolution");
|
||||||
|
} else {
|
||||||
|
global.modules.consoleHelper.printInfo(emoji.page, `${req.method}: ${req.url} was requested`);
|
||||||
|
res.sendFile(__dirname + BASE_PATH + "/files" + req.url);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
post:function(req, res) {
|
||||||
|
/*
|
||||||
|
req - Request from client
|
||||||
|
res - Response from server
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Anything that needs to be done with a post can be done here.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.MOD_FUNC = MODULE_FUNCTION;
|
|
@ -1,37 +0,0 @@
|
||||||
"use strict";
|
|
||||||
const fs = require("fs");
|
|
||||||
const chalk = require("chalk");
|
|
||||||
let d = new Date();
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
log: function(type, emoji, text) {
|
|
||||||
d = new Date();
|
|
||||||
console.log(`${chalk.green(`[${timeNumbers(d.getHours())}:${timeNumbers(d.getMinutes())}:${timeNumbers(d.getSeconds())} - ${type}]`)} ${emoji} ${text}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function timeNumbers(inp) {
|
|
||||||
if (inp == 0) {
|
|
||||||
return "00";
|
|
||||||
} else if (inp == 1) {
|
|
||||||
return "01";
|
|
||||||
} else if (inp == 2) {
|
|
||||||
return "02";
|
|
||||||
} else if (inp == 3) {
|
|
||||||
return "03";
|
|
||||||
} else if (inp == 4) {
|
|
||||||
return "04";
|
|
||||||
} else if (inp == 5) {
|
|
||||||
return "05";
|
|
||||||
} else if (inp == 6) {
|
|
||||||
return "06";
|
|
||||||
} else if (inp == 7) {
|
|
||||||
return "07";
|
|
||||||
} else if (inp == 8) {
|
|
||||||
return "08";
|
|
||||||
} else if (inp == 9) {
|
|
||||||
return "09";
|
|
||||||
} else {
|
|
||||||
return inp;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
const fs = require("fs");
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
handle:function(modules, internals, emoji, req, res) {
|
|
||||||
/*
|
|
||||||
modules - Modules that are loaded when Revolution starts
|
|
||||||
internals - Predefined variables, e.g the version and lables like "INFO"
|
|
||||||
emoji - Pretty self explanitory, the list of emojis used in Revolution.
|
|
||||||
req - Request from client
|
|
||||||
res - Response from server
|
|
||||||
*/
|
|
||||||
res.set("Server-Type", "Revolution");
|
|
||||||
if (req.url == "/") {
|
|
||||||
modules.logger.log(`${internals.types.b}: ${req.method}`, emoji.page, `${req.url} was requested`);
|
|
||||||
res.end(); // Send a blank response, this can be changed to make it do whatever.
|
|
||||||
} else {
|
|
||||||
fs.access(__dirname + req.url, fs.constants.F_OK | fs.constants.W_OK, (err) => {
|
|
||||||
if (err) {
|
|
||||||
modules.logger.log(`${internals.types.b}: ${req.method}`, emoji.page, `${req.url} was requested - Returned 404`);
|
|
||||||
res.status(404).send("404!<hr>Revolution");
|
|
||||||
} else {
|
|
||||||
modules.logger.log(`${internals.types.b}: ${req.method}`, emoji.page, `${req.url} was requested`);
|
|
||||||
res.sendFile(__dirname + req.url);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue