kannon-client/kannon-client.js

70 lines
2.3 KiB
JavaScript
Raw Normal View History

2022-04-14 14:25:48 +02:00
const packageJSON = require('./package.json');
const path = require('path');
const Connection = require('./classes/Connection.js');
const Logger = require('./classes/Logger.js');
const Player = require('./classes/Player.js');
2022-04-14 14:25:48 +02:00
const INTERRUPTS = ['beforeExit', 'SIGINT', 'SIGTERM'];
main();
async function main() {
global.reconnects = 0;
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();
2022-04-21 13:40:00 +02:00
global.constants = require('./libs/constants.js');
2022-04-14 14:25:48 +02:00
global.logger.info("launching " + packageJSON.name + " " + packageJSON.version + "...");
global.player = new Player();
global.connection = new Connection();
while (true) {
try {
await global.connection.initialize();
global.reconnects = 0;
} catch (err) {
const limit = global.config.reconnect?.limit;
if (isNaN(limit) || (global.reconnects >= limit && limit > 0)) {
return exit(err);
}
global.logger.error(err);
const delay = global.config.reconnect?.delay || 1000;
global.reconnects++;
global.logger.warn('retry ' + global.reconnects + '/' + limit + " in " + delay + 'ms...');
await new Promise((resolve, reject) => {
setTimeout(resolve, delay);
})
}
}
};
function handleExit() {
for (var index = 0; index < INTERRUPTS.length; index++) {
process.on(INTERRUPTS[index], (code) => {
exit(undefined, code);
});
}
}
function exit(err, code) {
if (code === undefined) {
code = 0;
if (err !== undefined) {
code = 1;
}
}
if (err) {
global.logger.error(err);
global.logger.error(packageJSON.name + ' ' + packageJSON.version + ' ended due to an error');
} else {
global.logger.info(packageJSON.name + ' ' + packageJSON.version + ' shutting down gracefully')
}
process.exit(code);
}