68 lines
2.1 KiB
JavaScript
68 lines
2.1 KiB
JavaScript
|
const util = require('./libs/util.js');
|
||
|
const packageJSON = require('./package.json');
|
||
|
const path = require('path');
|
||
|
|
||
|
const Logger = require('./classes/Logger.js');
|
||
|
const Server = require('./classes/Server.js');
|
||
|
const Database = require('./classes/Database.js');
|
||
|
const Queue = require('./classes/Queue.js');
|
||
|
const Watcher = require('./classes/Watcher.js');
|
||
|
|
||
|
const INTERRUPTS = ['beforeExit', 'SIGINT', 'SIGTERM'];
|
||
|
|
||
|
main();
|
||
|
|
||
|
async function main() {
|
||
|
global.logger = new Logger();
|
||
|
let configPath = path.resolve(process.argv[2] || __dirname + '/config.json');
|
||
|
try {
|
||
|
global.config = require(configPath);
|
||
|
global.logger.setLogLevel(global.config?.log?.level);
|
||
|
global.logger.setTimestamp(global.config?.log?.timestamp);
|
||
|
} catch (err) {
|
||
|
exit('could not read config file at \'' + configPath + '\'');
|
||
|
}
|
||
|
handleExit();
|
||
|
global.logger.info("launching " + packageJSON.name + " " + packageJSON.version + "...");
|
||
|
try {
|
||
|
// connect to the database and create/alter tables
|
||
|
global.database = new Database();
|
||
|
await global.database.initialize();
|
||
|
// socket server
|
||
|
if (util.isEnabled(global.config.server)) {
|
||
|
global.server = new Server();
|
||
|
await global.server.start();
|
||
|
}
|
||
|
// queue and watcher
|
||
|
if (util.isEnabled(global.config.library)) {
|
||
|
global.queue = new Queue();
|
||
|
global.watcher = new Watcher();
|
||
|
}
|
||
|
} catch (err) {
|
||
|
exit(err);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
function handleExit() {
|
||
|
for (var index = 0; index < INTERRUPTS.length; index++) {
|
||
|
process.on(INTERRUPTS[index], async (code) => {
|
||
|
exit(undefined, code);
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function exit(err, code) {
|
||
|
if (code === undefined) {
|
||
|
code = 0;
|
||
|
if (err !== undefined) {
|
||
|
code = 1;
|
||
|
}
|
||
|
}
|
||
|
if (err) {
|
||
|
logger.error(err);
|
||
|
logger.error(packageJSON.name + ' ' + packageJSON.version + ' ended due to an error');
|
||
|
} else {
|
||
|
logger.info(packageJSON.name + ' ' + packageJSON.version + ' shutting down gracefully')
|
||
|
}
|
||
|
process.exit(code);
|
||
|
}
|