global-event-handler
Version:
A hierarchical global event handler. Runs as its own fork or standalone server and syncs events acros forks and or servers
133 lines • 5.62 kB
JavaScript
;
//import {globalEventHandlerServer} from './server';
var client_1 = require('./client');
var client_2 = require('./client');
exports.globalEventHandlerClient = client_2.globalEventHandlerClient;
exports.globalEvent = client_2.globalEvent;
exports.globalEventLissener = client_2.globalEventLissener;
var globalEventHandler = (function () {
function globalEventHandler(options) {
if (options === void 0) { options = {}; }
this._port = 9838;
this._client = true;
this._server = true;
this._serverAddress = 'localhost';
this._debug = false;
this._pm2 = false;
var me = this;
for (var _o in options) {
this['_' + _o] = options[_o];
}
if (this._pm2)
this.pm2 = require('pm2');
if (this._server) {
var cluster = require('cluster');
if (cluster.isMaster) {
var args = [];
if (this._debug)
args.push('--debug=5859');
if (!this._pm2)
this.loanchServer(require('child_process').fork(__dirname + '/server.js', [], { execArgv: args }));
else {
this.pm2.connect(function (err) {
console.log({ err: err });
me.pm2.list(function (err, pList) {
//console.log(pList)
var pi = pList.find(function (pp) {
console.log(pp.pm2_env.status);
return pp.name == 'server' && pp.pm2_env.status != 'stopped';
});
if (pi)
console.log(pi.pm2_env.pm_id);
if (pi)
me.pm2.sendDataToProcessId(pi.pm2_env.pm_id, { topic: 'process:msg', data: { event: 'connect', port: me._port } }, function (err) {
console.log({ err: err });
});
else {
var c = me.pm2.start({ script: __dirname + '/server.js', function: function (error, apps) {
console.log({ error: error });
console.log({ apps: apps });
} });
var pi = pList.find(function (pp) {
//console.log(pp.name)
return pp.name == 'server' && pp.pm2_env.status != 'stopped';
});
if (pi)
me.pm2.sendDataToProcessId({ type: 'process:msg', data: { event: 'connect', port: me.port }, id: pi.pm2_env.pm_id }, function (err) {
console.log({ err: err });
});
}
});
});
}
}
}
if (this._client) {
this._globalEventHandlerClient = new client_1.globalEventHandlerClient(this._port, this._serverAddress);
}
}
Object.defineProperty(globalEventHandler.prototype, "port", {
get: function () {
return this._port;
},
enumerable: true,
configurable: true
});
Object.defineProperty(globalEventHandler.prototype, "client", {
get: function () {
return this._client;
},
enumerable: true,
configurable: true
});
Object.defineProperty(globalEventHandler.prototype, "server", {
get: function () {
return this._server;
},
enumerable: true,
configurable: true
});
Object.defineProperty(globalEventHandler.prototype, "serverAddress", {
get: function () {
return this._serverAddress;
},
enumerable: true,
configurable: true
});
Object.defineProperty(globalEventHandler.prototype, "globalEventHandlerClient", {
get: function () {
return this._globalEventHandlerClient;
},
enumerable: true,
configurable: true
});
globalEventHandler.prototype.loanchServer = function (server) {
var me = this;
server.send({ event: 'connect', port: this._port });
server.on('exit', function (code, signal) {
if (signal) {
if (me._debug)
console.log("globalEventServer was killed by signal: " + signal);
}
else if (code !== 0) {
if (me._debug)
console.log("globalEventServer exited with error code: " + code);
var args = [];
if (me._debug)
args.push('--debug=5859');
me.loanchServer(require('child_process').fork(__dirname + '/server.js', [], { execArgv: args }));
}
else {
if (me._debug)
console.log('globalEventServer died!');
}
});
var ON_DEATH = require('death')({ uncaughtException: true });
ON_DEATH(function (signal, err) {
server.kill('SIGINT');
});
};
return globalEventHandler;
}());
exports.globalEventHandler = globalEventHandler;
//# sourceMappingURL=index.js.map