blinksocks/bin/bootstrap.js

40 lines
950 B
JavaScript
Raw Normal View History

const cluster = require('cluster');
2016-12-09 14:54:58 +00:00
const fs = require('fs');
2016-12-09 14:54:58 +00:00
/**
2017-09-05 06:33:42 +00:00
* get raw config object from json
* @param file
* @returns {object}
2016-12-09 14:54:58 +00:00
*/
function obtainConfig(file) {
let json;
try {
2017-09-05 06:33:42 +00:00
const jsonFile = fs.readFileSync(file);
json = JSON.parse(jsonFile);
} catch (err) {
throw Error(`fail to load/parse your '${file}': ${err.message}`);
}
return json;
2016-12-09 14:54:58 +00:00
}
2017-10-21 03:57:58 +00:00
module.exports = function bootstrap(configPath, {Hub, Config}) {
try {
const config = obtainConfig(configPath);
Config.test(config);
const workers = config.workers;
if (cluster.isMaster && workers > 0) {
for (let i = 0; i < workers; ++i) {
cluster.fork();
}
console.log(`[bootstrap] started ${workers} workers`);
} else {
const hub = new Hub(config);
hub.run();
process.on('SIGINT', () => hub.terminate(() => process.exit(0)));
}
} catch (err) {
console.error(err);
process.exit(-1);
2017-01-02 15:18:26 +00:00
}
2016-12-09 14:54:58 +00:00
};