From e65da93ce1a6761b21ad21f9f53e0bde52654a37 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Thu, 19 May 2016 16:59:15 -0700 Subject: [PATCH] more refactoring. --- lib/bcoin/pool.js | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/lib/bcoin/pool.js b/lib/bcoin/pool.js index 1ef13ef7..b46d8722 100644 --- a/lib/bcoin/pool.js +++ b/lib/bcoin/pool.js @@ -921,7 +921,7 @@ Pool.prototype._createPeer = function _createPeer(options) { : null; bcoin.debug( - 'Reject (%s): msg=%s ccode=%s reason=%s data=%s', + 'Reject (%s): msg=%s ccode=%s reason=%s data=%s.', peer.hostname, payload.message, payload.ccode, @@ -1007,8 +1007,12 @@ Pool.prototype._createPeer = function _createPeer(options) { self.block.versionHeight = version.height; bcoin.debug( - 'Received version (%s): version=%d height=%d agent=%s', - peer.hostname, version.version, version.height, version.agent); + 'Received version (%s): version=%d height=%d services=%s agent=%s', + peer.hostname, + version.version, + version.height, + version.services.toString(2), + version.agent); bcoin.time.add(peer.host, version.ts); @@ -1231,7 +1235,7 @@ Pool.prototype._removePeer = function _removePeer(peer) { Object.keys(this.request.map).forEach(function(hash) { var item = this.request.map[hash]; if (item.peer === peer) - item.finish(); + item.finish(new Error('Peer closed.')); }, this); bcoin.debug('Removed loader peer (%s).', peer.hostname); this.peers.load = null; @@ -1695,7 +1699,7 @@ Pool.prototype.destroy = function destroy(callback) { }); Object.keys(this.request.map).forEach(function(hash) { - this.request.map[hash].finish(); + this.request.map[hash].finish(new Error('Pool closed.')); }, this); if (this.peers.load) @@ -2014,16 +2018,30 @@ function LoadRequest(pool, peer, type, hash, callback) { this.callback = []; this.active = false; this.id = this.pool.uid++; + this.timeout = null; - if (callback) - this.callback.push(callback); + this.addCallback(callback); assert(!this.pool.request.map[this.hash]); this.pool.request.map[this.hash] = this; - this._finish = this.finish.bind(this); + this._finish = this._ontimeout.bind(this); } +LoadRequest.prototype._ontimeout = function _ontimeout() { + this.finish(new Error('Timeout.')); +}; + +/** + * Add a callback to be executed when item is received. + * @param {Function} callback + */ + +LoadRequest.prototype.addCallback = function addCallback(callback) { + if (callback) + this.callback.push(callback); +}; + /** * Mark the request as in-flight. Start timeout timer. */ @@ -2034,6 +2052,7 @@ LoadRequest.prototype.start = function start() { this.active = true; this.pool.request.active++; + if (this.type === this.pool.tx.type) this.pool.request.activeTX++; else @@ -2045,6 +2064,7 @@ LoadRequest.prototype.start = function start() { /** * Mark the request as completed. * Remove from queue and map. Clear timeout. + * @param {Error?} err */ LoadRequest.prototype.finish = function finish(err) { @@ -2053,12 +2073,12 @@ LoadRequest.prototype.finish = function finish(err) { if (this.pool.request.map[this.hash]) { delete this.pool.request.map[this.hash]; if (this.active) { + this.active = false; this.pool.request.active--; if (this.type === this.pool.tx.type) this.pool.request.activeTX--; else this.pool.request.activeBlocks--; - this.active = false; } } @@ -2071,7 +2091,7 @@ LoadRequest.prototype.finish = function finish(err) { if (this.timeout != null) { clearTimeout(this.timeout); - delete this.timeout; + this.timeout = null; } for (i = 0; i < this.callback.length; i++) @@ -2137,7 +2157,7 @@ utils.inherits(BroadcastItem, EventEmitter); /** * Add a callback to be executed on ack, timeout, or reject. - * @param { + * @param {Function} callback */ BroadcastItem.prototype.addCallback = function addCallback(callback) {