From ca88298b762658d668aebf7183160c0c1eda237d Mon Sep 17 00:00:00 2001 From: Matthew Fettig Date: Sat, 19 Jul 2014 22:23:36 -0700 Subject: [PATCH] [FIX] server: fixed reconnect logic bugs --- src/js/ripple/server.js | 20 ++++++++++++++++---- test/server-test.js | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/js/ripple/server.js b/src/js/ripple/server.js index ab3d931f..352e975f 100644 --- a/src/js/ripple/server.js +++ b/src/js/ripple/server.js @@ -190,6 +190,7 @@ Server.prototype._setState = function(state) { switch (state) { case 'online': this._connected = true; + this._retry = 0; this.emit('connect'); break; case 'offline': @@ -310,6 +311,12 @@ Server.prototype.disconnect = function() { return; } + //these need to be reset so that updateScore + //and checkActivity do not trigger reconnect + this._lastLedgerIndex = NaN; + this._lastLedgerClose = NaN; + this._score = 0; + this._shouldConnect = false; this._setState('offline'); @@ -327,14 +334,19 @@ Server.prototype.disconnect = function() { Server.prototype.reconnect = function() { var self = this; - function disconnected() { + function reconnect() { self._shouldConnect = true; + self._retry = 0; self.connect(); }; - if (this._ws) { - this.once('disconnect', disconnected); - this.disconnect(); + if (this._ws && this._shouldConnect) { + if (this._connected) { + this.once('disconnect', reconnect); + this.disconnect(); + } else { + reconnect(); + } } }; diff --git a/test/server-test.js b/test/server-test.js index ec80a051..ce5e6553 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -481,7 +481,7 @@ describe('Server', function() { it('Reconnect', function(done) { var server = new Server(new Remote(), 'ws://localhost:5748'); server._connected = true; - + server._shouldConnect = true; server._ws = { }; var disconnected = false;