#!/usr/bin/env node
var cluster = require("cluster");
var expressCluster = require("express-cluster");
var OS = require("os");
var config = require("./helpers/config");
var controller = require("./helpers/controller");
var Database = require("./helpers/database");
var Tools = require("./helpers/tools");
var count = config("system.workerCount", OS.cpus().length);
if (count <= 0)
count = OS.cpus().length;
var spawnCluster = function() {
expressCluster(function(worker) {
console.log("[" + process.pid + "] Initializing...");
var express = require("express");
var controller = require("./helpers/controller");
var app = express();
app.use(require("./middlewares"));
app.use(require("./controllers"));
app.use("*", function(req, res) {
controller.notFound(req, res);
});
controller.initialize().then(function() {
app.listen(config("server.port", 8080), function() {
console.log("[" + process.pid + "] Listening on port " + config("server.port", 8080) + "...");
});
}).catch(function(err) {
console.log(err);
});
}, {
count: count,
respawn: true
});
};
if (cluster.isMaster) {
console.log("Spawning workers, please, wait...");
spawnCluster();
var ready = 0;
} else {
var Domain = require("domain");
var domain = Domain.create();
domain.on("error", function(err) {
console.error(err.stack || err);
});
domain.run(function() {
spawnCluster();
});
}
IyEvdXNyL2Jpbi9lbnYgbm9kZQoKdmFyIGNsdXN0ZXIgPSByZXF1aXJlKCJjbHVzdGVyIik7CnZhciBleHByZXNzQ2x1c3RlciA9IHJlcXVpcmUoImV4cHJlc3MtY2x1c3RlciIpOwp2YXIgT1MgPSByZXF1aXJlKCJvcyIpOwoKdmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4vaGVscGVycy9jb25maWciKTsKdmFyIGNvbnRyb2xsZXIgPSByZXF1aXJlKCIuL2hlbHBlcnMvY29udHJvbGxlciIpOwp2YXIgRGF0YWJhc2UgPSByZXF1aXJlKCIuL2hlbHBlcnMvZGF0YWJhc2UiKTsKdmFyIFRvb2xzID0gcmVxdWlyZSgiLi9oZWxwZXJzL3Rvb2xzIik7Cgp2YXIgY291bnQgPSBjb25maWcoInN5c3RlbS53b3JrZXJDb3VudCIsIE9TLmNwdXMoKS5sZW5ndGgpOwppZiAoY291bnQgPD0gMCkKICAgIGNvdW50ID0gT1MuY3B1cygpLmxlbmd0aDsKCnZhciBzcGF3bkNsdXN0ZXIgPSBmdW5jdGlvbigpIHsKICAgIGV4cHJlc3NDbHVzdGVyKGZ1bmN0aW9uKHdvcmtlcikgewogICAgICAgIGNvbnNvbGUubG9nKCJbIiArIHByb2Nlc3MucGlkICsgIl0gSW5pdGlhbGl6aW5nLi4uIik7CgogICAgICAgIHZhciBleHByZXNzID0gcmVxdWlyZSgiZXhwcmVzcyIpOwoKICAgICAgICB2YXIgY29udHJvbGxlciA9IHJlcXVpcmUoIi4vaGVscGVycy9jb250cm9sbGVyIik7CgogICAgICAgIHZhciBhcHAgPSBleHByZXNzKCk7CgogICAgICAgIGFwcC51c2UocmVxdWlyZSgiLi9taWRkbGV3YXJlcyIpKTsKICAgICAgICBhcHAudXNlKHJlcXVpcmUoIi4vY29udHJvbGxlcnMiKSk7CiAgICAgICAgYXBwLnVzZSgiKiIsIGZ1bmN0aW9uKHJlcSwgcmVzKSB7CiAgICAgICAgICAgIGNvbnRyb2xsZXIubm90Rm91bmQocmVxLCByZXMpOwogICAgICAgIH0pOwoKICAgICAgICBjb250cm9sbGVyLmluaXRpYWxpemUoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBhcHAubGlzdGVuKGNvbmZpZygic2VydmVyLnBvcnQiLCA4MDgwKSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiWyIgKyBwcm9jZXNzLnBpZCArICJdIExpc3RlbmluZyBvbiBwb3J0ICIgKyBjb25maWcoInNlcnZlci5wb3J0IiwgODA4MCkgKyAiLi4uIik7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikgewogICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpOwogICAgICAgIH0pOwogICAgfSwgewogICAgICAgIGNvdW50OiBjb3VudCwKICAgICAgICByZXNwYXduOiB0cnVlCiAgICB9KTsKfTsKCmlmIChjbHVzdGVyLmlzTWFzdGVyKSB7CiAgICBjb25zb2xlLmxvZygiU3Bhd25pbmcgd29ya2VycywgcGxlYXNlLCB3YWl0Li4uIik7CiAgICBzcGF3bkNsdXN0ZXIoKTsKICAgIHZhciByZWFkeSA9IDA7Cn0gZWxzZSB7CiAgICB2YXIgRG9tYWluID0gcmVxdWlyZSgiZG9tYWluIik7CgogICAgdmFyIGRvbWFpbiA9IERvbWFpbi5jcmVhdGUoKTsKCiAgICBkb21haW4ub24oImVycm9yIiwgZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcihlcnIuc3RhY2sgfHwgZXJyKTsKICAgIH0pOwoKICAgIGRvbWFpbi5ydW4oZnVuY3Rpb24oKSB7CiAgICAgICAgc3Bhd25DbHVzdGVyKCk7CiAgICB9KTsKfQo=