48 regels
1.3 KiB
JavaScript
48 regels
1.3 KiB
JavaScript
'use strict';
|
|
|
|
module.exports.create = function (prefixes) {
|
|
if (prefixes.debug) { console.log('[cluster-rpc] master created'); }
|
|
var m = new (require('events').EventEmitter)();
|
|
|
|
m.addWorker = function (worker) {
|
|
if (prefixes.debug) { console.log('[cluster-rpc] [master] adding worker'); }
|
|
m._workers = [];
|
|
|
|
var w = new (require('events').EventEmitter)();
|
|
|
|
function emitConnection() {
|
|
if (w.__online) {
|
|
return;
|
|
}
|
|
|
|
w.__online = true;
|
|
m.emit('connection', w);
|
|
}
|
|
|
|
worker.on('online', function () {
|
|
if (prefixes.debug) { console.log('[cluster-rpc] [master] worker came online, at fork'); }
|
|
emitConnection();
|
|
});
|
|
|
|
worker.on('message', function (data) {
|
|
if (prefixes.connect === data.type) {
|
|
if (prefixes.debug) { console.log('[cluster-rpc] [master] worker connected, manually'); }
|
|
emitConnection();
|
|
return;
|
|
}
|
|
if (prefixes.debug) { console.log('[cluster-rpc] [master] worker sent message', data); }
|
|
w.emit('message', data);
|
|
});
|
|
|
|
w.send = function (data) {
|
|
if (prefixes.debug) { console.log('[cluster-rpc] [master] sending', data); }
|
|
worker.send(data);
|
|
};
|
|
|
|
// TODO remove workers that exit
|
|
m._workers.push(w);
|
|
};
|
|
|
|
return m;
|
|
};
|