78 lines
1.1 KiB
JavaScript
78 lines
1.1 KiB
JavaScript
|
|
||
|
/**
|
||
|
* Module dependencies.
|
||
|
*/
|
||
|
|
||
|
var Socket = require('./sock');
|
||
|
var slice = require('../utils').slice;
|
||
|
|
||
|
/**
|
||
|
* Expose `PubSocket`.
|
||
|
*/
|
||
|
|
||
|
module.exports = PubSocket;
|
||
|
|
||
|
/**
|
||
|
* Initialize a new `PubSocket`.
|
||
|
*
|
||
|
* @api private
|
||
|
*/
|
||
|
|
||
|
function PubSocket() {
|
||
|
Socket.call(this);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Inherits from `Socket.prototype`.
|
||
|
*/
|
||
|
|
||
|
PubSocket.prototype.__proto__ = Socket.prototype;
|
||
|
|
||
|
/**
|
||
|
* Send `msg` to all established peers.
|
||
|
*
|
||
|
* @param {Mixed} msg
|
||
|
* @api public
|
||
|
*/
|
||
|
|
||
|
PubSocket.prototype.send = function(msg){
|
||
|
var socks = this.socks;
|
||
|
var len = socks.length;
|
||
|
var buf = this.pack(arguments);
|
||
|
|
||
|
for (var sock of socks) {
|
||
|
if (sock.writable) sock.write(buf);
|
||
|
}
|
||
|
|
||
|
return this;
|
||
|
};
|
||
|
|
||
|
PubSocket.prototype.sendv2 = function(data, cb){
|
||
|
var socks = this.socks;
|
||
|
var len = socks.length;
|
||
|
var sock;
|
||
|
|
||
|
if (len == 0)
|
||
|
return process.nextTick(cb);
|
||
|
|
||
|
var buf = this.pack([data]);
|
||
|
|
||
|
var i = 0;
|
||
|
|
||
|
socks.forEach(function(sock) {
|
||
|
if (sock.writable)
|
||
|
sock.write(buf, function() {
|
||
|
i++;
|
||
|
if (i == len)
|
||
|
process.nextTick(cb);
|
||
|
});
|
||
|
else {
|
||
|
i++;
|
||
|
if (i == len)
|
||
|
process.nextTick(cb);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return this;
|
||
|
};
|