pool: move common listeners to createPeer.

This commit is contained in:
Christopher Jeffrey 2016-01-11 22:27:59 -08:00
parent 24f8bc69c5
commit d316b1c640

View File

@ -291,15 +291,6 @@ Pool.prototype._addLoader = function _addLoader() {
this.peers.load = peer;
this.peers.all.push(peer);
peer.on('error', function(err) {
self.emit('error', err, peer);
});
peer.on('debug', function() {
var args = Array.prototype.slice.call(arguments);
self.emit.apply(self, ['debug'].concat(args));
});
peer.once('close', function() {
self._stopInterval();
self._stopTimer();
@ -315,12 +306,6 @@ Pool.prototype._addLoader = function _addLoader() {
self._stopTimer();
});
peer.on('version', function(version) {
if (version.height > self.block.bestHeight)
self.block.bestHeight = version.height;
self.emit('version', version, peer);
});
peer.on('merkleblock', function(block) {
// If the peer sent us a block that was added
// to the chain (not orphans), reset the timeout.
@ -616,12 +601,73 @@ Pool.prototype.loadMempool = function loadMempool() {
};
Pool.prototype._createPeer = function _createPeer(backoff) {
var self = this;
var peer = new bcoin.peer(this, this.createConnection, {
backoff: backoff,
startHeight: this.options.startHeight,
relay: this.options.relay
});
peer._retry = 0;
peer.on('error', function(err) {
self.emit('error', err, peer);
});
peer.on('debug', function() {
var args = Array.prototype.slice.call(arguments);
self.emit.apply(self, ['debug'].concat(args));
});
peer.on('reject', function(payload) {
self.emit('debug',
'Reject: msg=%s ccode=%s reason=%s data=%s',
payload.message, payload.ccode, payload.reason,
utils.toHex(payload.data));
self.emit('reject', payload, peer);
});
peer.on('notfound', function(items) {
items.forEach(function(item) {
var req = self.request.map[utils.toHex(item.hash)];
if (req && req.peer === peer)
req.finish(null);
});
});
peer.on('tx', function(tx) {
self._response(tx);
self.emit('tx', tx, peer);
if (!self.options.fullNode && tx.block)
self.emit('watched', tx, peer);
});
peer.on('addr', function(addr) {
var host = addr.ipv4 + ':' + addr.port;
if (self.seeds.length > self.size * 2)
self.seeds = network.seeds.slice();
if (self.seeds.indexOf(host) !== -1) {
self.emit('debug', 'Found new peer: %s', host);
self.seeds.push(host);
}
self.emit('addr', addr, peer);
});
peer.on('txs', function(txs) {
self.emit('txs', txs, peer);
});
peer.on('version', function(version) {
if (version.height > self.block.bestHeight)
self.block.bestHeight = version.height;
self.emit('version', version, peer);
});
return peer;
};
@ -645,16 +691,6 @@ Pool.prototype._addPeer = function _addPeer(backoff) {
this.peers.pending.push(peer);
this.peers.all.push(peer);
// Create new peer on failure
peer.on('error', function(err) {
self.emit('error', err, peer);
});
peer.on('debug', function() {
var args = Array.prototype.slice.call(arguments);
self.emit.apply(self, ['debug'].concat(args));
});
peer.once('close', function() {
self._removePeer(peer);
if (self.destroyed)
@ -699,58 +735,10 @@ Pool.prototype._addPeer = function _addPeer(backoff) {
self._handleBlock(block, peer);
});
peer.on('reject', function(payload) {
self.emit('debug',
'Reject: msg=%s ccode=%s reason=%s data=%s',
payload.message, payload.ccode, payload.reason,
utils.toHex(payload.data));
self.emit('reject', payload, peer);
});
peer.on('notfound', function(items) {
items.forEach(function(item) {
var req = self.request.map[utils.toHex(item.hash)];
if (req && req.peer === peer)
req.finish(null);
});
});
peer.on('tx', function(tx) {
self._response(tx);
self.emit('tx', tx, peer);
if (!self.options.fullNode && tx.block)
self.emit('watched', tx, peer);
});
peer.on('addr', function(addr) {
var host = addr.ipv4 + ':' + addr.port;
if (self.seeds.length > self.size * 2)
self.seeds = network.seeds.slice();
if (!~self.seeds.indexOf(host)) {
self.emit('debug', 'Found new peer: %s', host);
self.seeds.push(host);
}
self.emit('addr', addr, peer);
});
peer.on('blocks', function(hashes) {
self._handleInv(hashes, peer);
});
peer.on('txs', function(txs) {
self.emit('txs', txs, peer);
});
peer.on('version', function(version) {
if (version.height > self.block.bestHeight)
self.block.bestHeight = version.height;
self.emit('version', version, peer);
});
utils.nextTick(function() {
self.emit('peer', peer);
});