mirror of
https://github.com/nodejs/node.git
synced 2025-05-08 18:14:08 +00:00

This commit splits the existing cluster module into several internal modules. More specifically, the cluster master and worker implementations are separated, and the various data structures are separated. PR-URL: https://github.com/nodejs/node/pull/10746 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
49 lines
1.2 KiB
JavaScript
49 lines
1.2 KiB
JavaScript
'use strict';
|
|
const assert = require('assert');
|
|
const dgram = require('dgram');
|
|
const net = require('net');
|
|
|
|
module.exports = SharedHandle;
|
|
|
|
function SharedHandle(key, address, port, addressType, fd, flags) {
|
|
this.key = key;
|
|
this.workers = [];
|
|
this.handle = null;
|
|
this.errno = 0;
|
|
|
|
// FIXME(bnoordhuis) Polymorphic return type for lack of a better solution.
|
|
var rval;
|
|
|
|
if (addressType === 'udp4' || addressType === 'udp6')
|
|
rval = dgram._createSocketHandle(address, port, addressType, fd, flags);
|
|
else
|
|
rval = net._createServerHandle(address, port, addressType, fd);
|
|
|
|
if (typeof rval === 'number')
|
|
this.errno = rval;
|
|
else
|
|
this.handle = rval;
|
|
}
|
|
|
|
SharedHandle.prototype.add = function(worker, send) {
|
|
assert(this.workers.indexOf(worker) === -1);
|
|
this.workers.push(worker);
|
|
send(this.errno, null, this.handle);
|
|
};
|
|
|
|
SharedHandle.prototype.remove = function(worker) {
|
|
const index = this.workers.indexOf(worker);
|
|
|
|
if (index === -1)
|
|
return false; // The worker wasn't sharing this handle.
|
|
|
|
this.workers.splice(index, 1);
|
|
|
|
if (this.workers.length !== 0)
|
|
return false;
|
|
|
|
this.handle.close();
|
|
this.handle = null;
|
|
return true;
|
|
};
|