66 lines
1.7 KiB
JavaScript
66 lines
1.7 KiB
JavaScript
const EventEmitter = require('events');
|
|
const fs = require("fs");
|
|
const md5 = require('md5');
|
|
|
|
let logger = {
|
|
log: (...p) => console.log(...p),
|
|
error: (msg, err, level) => console.error(`Error: ${msg}\n${"=".repeat(16)}\nStack Error >>`, err.stack)
|
|
};
|
|
let fileMD5;
|
|
global.config = {};
|
|
let emitterObject = new EventEmitter();
|
|
|
|
function configValidator (cfg) {
|
|
// Any custom validation
|
|
// must be return: { condition : bool, fineConfig : confg }
|
|
return {
|
|
condition: true,
|
|
fineConfig: cfg
|
|
};
|
|
}
|
|
|
|
function setConfig (configData, isFirst = true) {
|
|
try {
|
|
fileMD5 = md5(configData);
|
|
if (!isFirst)
|
|
emitterObject.emit("config.update", {
|
|
oldConfig: Object.assign({}, global.config),
|
|
newConfig: JSON.parse(configData)
|
|
});
|
|
global.config = Object.assign({}, JSON.parse(configData));
|
|
const result = configValidator(Object.assign({}, global.config));
|
|
if (result.condition) {
|
|
global.config = result.fineConfig;
|
|
}
|
|
/*if (!config?.ip) config.ip = "0.0.0.0";
|
|
if (!config?.port) config.port = 1441;
|
|
else config.port = +config.port;*/
|
|
}
|
|
catch (err) {
|
|
logger.error("Config not parsed", err, "config-parse");
|
|
}
|
|
}
|
|
|
|
module.exports = (emitter, configObject, loggerObj = logger) => {
|
|
emitterObject = emitter;
|
|
global.config = configObject;
|
|
logger = loggerObj ?? logger;
|
|
|
|
setConfig(fs.readFileSync("./config.json", { encoding: 'utf-8' }));
|
|
|
|
// Every time checking config.json for rt-update
|
|
setInterval(async () => {
|
|
fs.readFile("./config.json", { encoding: 'utf-8' }, (err, data) => {
|
|
if (err) {
|
|
logger.error("Config not readable", err, "config-file");
|
|
}
|
|
else {
|
|
if (fileMD5 !== md5(data)) {
|
|
logger.log("Changes on file config.json detected: config will be reloaded");
|
|
setConfig(data, false);
|
|
}
|
|
}
|
|
});
|
|
}, 5);
|
|
}
|