From 48aa5b6c0159b6557bebe6fee01fa2e3a9aaa9da Mon Sep 17 00:00:00 2001 From: wltsmrz Date: Fri, 15 Nov 2013 22:38:48 -0800 Subject: [PATCH] Add server activity check / reconnect defunct servers --- src/js/ripple/server.js | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/js/ripple/server.js b/src/js/ripple/server.js index 63bef133..bdfbe6a7 100644 --- a/src/js/ripple/server.js +++ b/src/js/ripple/server.js @@ -43,6 +43,15 @@ function Server(remote, opts) { this.on('response_subscribe', function(message) { self._handleResponseSubscribe(message); }); + + function checkServerActivity() { + var delta = Date.now() - self._lastLedgerClose; + if (delta > (1000 * 20)) { + self.reconnect(); + } + }; + + setInterval(checkServerActivity, 1000); }; util.inherits(Server, EventEmitter); @@ -235,6 +244,15 @@ Server.prototype.disconnect = function() { if (this._ws) this._ws.close(); }; +/** + * Reconnect to rippled WebSocket server + */ + +Server.prototype.reconnect = function() { + this.disconnect(); + this.connect(); +}; + /** * Submit a Request object. * @@ -314,6 +332,10 @@ Server.prototype._handleMessage = function(message) { this._setState(~(Server._onlineStates.indexOf(message.server_status)) ? 'online' : 'offline'); break; + case 'ledgerClosed': + this._lastLedgerClose = Date.now(); + break; + case 'path_find': this._remote._trace('server: path_find: %s', message); break; @@ -352,7 +374,7 @@ Server.prototype._handleMessage = function(message) { */ Server.prototype._handleResponseSubscribe = function(message) { - if (Server.onlineStates.indexOf(message.server_status)) { + if (~(Server.onlineStates.indexOf(message.server_status))) { this._setState('online'); } };