pool: add startSync and stopSync.
This commit is contained in:
parent
f420b41907
commit
f17f3b5bee
@ -65,6 +65,8 @@ function Pool(options) {
|
||||
if (!this.options.headers)
|
||||
this.options.multiplePeers = false;
|
||||
|
||||
this.syncing = false;
|
||||
|
||||
this.backoff = {
|
||||
delta: options.backoffDelta || 500,
|
||||
max: options.backoffMax || 5000
|
||||
@ -201,6 +203,9 @@ Pool.prototype._startTimer = function _startTimer() {
|
||||
this._stopTimer();
|
||||
|
||||
function destroy() {
|
||||
if (!self.syncing)
|
||||
return;
|
||||
|
||||
// Chain is full and up-to-date
|
||||
if (self.chain.isFull()) {
|
||||
self._stopTimer();
|
||||
@ -229,6 +234,8 @@ Pool.prototype._startInterval = function _startInterval() {
|
||||
this._stopInterval();
|
||||
|
||||
function load() {
|
||||
if (!self.syncing)
|
||||
return;
|
||||
// self._load();
|
||||
}
|
||||
|
||||
@ -301,12 +308,16 @@ Pool.prototype._addLoader = function _addLoader() {
|
||||
});
|
||||
|
||||
peer.once('ack', function() {
|
||||
if (!self.syncing)
|
||||
return;
|
||||
peer.updateWatch();
|
||||
if (!self._load())
|
||||
self._stopTimer();
|
||||
});
|
||||
|
||||
peer.on('merkleblock', function(block) {
|
||||
if (!self.syncing)
|
||||
return;
|
||||
// If the peer sent us a block that was added
|
||||
// to the chain (not orphans), reset the timeout.
|
||||
if (self._handleBlock(block, peer)) {
|
||||
@ -316,6 +327,8 @@ Pool.prototype._addLoader = function _addLoader() {
|
||||
});
|
||||
|
||||
peer.on('block', function(block) {
|
||||
if (!self.syncing)
|
||||
return;
|
||||
// If the peer sent us a block that was added
|
||||
// to the chain (not orphans), reset the timeout.
|
||||
if (self._handleBlock(block, peer)) {
|
||||
@ -326,20 +339,50 @@ Pool.prototype._addLoader = function _addLoader() {
|
||||
|
||||
if (self.options.headers) {
|
||||
peer.on('blocks', function(hashes) {
|
||||
if (!self.syncing)
|
||||
return;
|
||||
self._handleInv(hashes, peer);
|
||||
});
|
||||
|
||||
peer.on('headers', function(headers) {
|
||||
if (!self.syncing)
|
||||
return;
|
||||
self._handleHeaders(headers, peer);
|
||||
});
|
||||
} else {
|
||||
peer.on('blocks', function(hashes) {
|
||||
if (!self.syncing)
|
||||
return;
|
||||
self._handleBlocks(hashes, peer);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Pool.prototype.startSync = function startSync() {
|
||||
this.syncing = true;
|
||||
|
||||
this._startInterval();
|
||||
this._startTimer();
|
||||
|
||||
if (!this.peers.load) {
|
||||
this._addLoader();
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.peers.load.ack) {
|
||||
if (!this._load())
|
||||
this._stopTimer();
|
||||
}
|
||||
};
|
||||
|
||||
Pool.prototype.stopSync = function stopSync() {
|
||||
if (!this.syncing)
|
||||
return;
|
||||
|
||||
this.syncing = false;
|
||||
|
||||
this._stopInterval();
|
||||
this._stopTimer();
|
||||
};
|
||||
|
||||
Pool.prototype._handleHeaders = function _handleHeaders(headers, peer) {
|
||||
@ -574,6 +617,9 @@ Pool.prototype._load = function _load() {
|
||||
var self = this;
|
||||
var next;
|
||||
|
||||
if (!this.syncing)
|
||||
return true;
|
||||
|
||||
if (this.request.queue.length >= this.load.hwm) {
|
||||
this.load.hiReached = true;
|
||||
return false;
|
||||
@ -1000,7 +1046,6 @@ Pool.prototype.searchWallet = function(w) {
|
||||
);
|
||||
});
|
||||
|
||||
// this.search(ts);
|
||||
this.chain.resetTime(ts);
|
||||
};
|
||||
|
||||
@ -1085,10 +1130,12 @@ Pool.prototype.search = function search(id, range, e) {
|
||||
|
||||
this.chain.resetTime(range.start);
|
||||
|
||||
this.stopSync();
|
||||
|
||||
if (this.peers.load)
|
||||
this.peers.load.destroy();
|
||||
|
||||
this._load();
|
||||
this.startSync();
|
||||
|
||||
return e;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user