From d316b1c640108f9ce629480322ea07c8d7831d5f Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Mon, 11 Jan 2016 22:27:59 -0800 Subject: [PATCH] pool: move common listeners to createPeer. --- lib/bcoin/pool.js | 134 +++++++++++++++++++++------------------------- 1 file changed, 61 insertions(+), 73 deletions(-) diff --git a/lib/bcoin/pool.js b/lib/bcoin/pool.js index 54442178..b7ecc9a2 100644 --- a/lib/bcoin/pool.js +++ b/lib/bcoin/pool.js @@ -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); });