Skip to content

Instantly share code, notes, and snippets.

@emschwartz
Created May 6, 2014 21:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save emschwartz/796ad29f6cc562e6be45 to your computer and use it in GitHub Desktop.
Save emschwartz/796ad29f6cc562e6be45 to your computer and use it in GitHub Desktop.
/**
* Check if remote is connected and attempt to reconnect if not
*/
function ensureConnected(remote, callback) {
if (isConnected(remote)) {
callback(null, true);
return;
} else {
attemptConnect(remote, callback);
return;
}
}
/**
* Determine if remote is connected based on time of last ledger closed
*/
function isConnected(remote) {
if (!remote) {
return false;
}
var server = remote._getServer();
if (!server) {
return false;
}
return (Date.now() - server._lastLedgerClose <= 1000 * 20);
}
/**
* Attempt to reconnect, waiting no longer than 20
* seconds after the last ledger_closed event was heard
*/
function attemptConnect(remote, callback) {
var connected = false;
function onLedgerClosed() {
if (isConnected(remote)) {
connected = true;
remote.removeListener('ledger_closed', onLedgerClosed);
callback(null, true);
return;
}
}
remote.once('ledger_closed', onLedgerClosed);
setTimeout(function(){
remote.removeListener('ledger_closed', onLedgerClosed);
if (!connected) {
callback(new Error('Cannot connect to rippled. No "ledger_closed" events were heard within 20 seconds, most likely indicating that the connection to rippled has been interrupted or the rippled is unresponsive. Please check your internet connection and server settings and try again.'));
}
return;
}, module.exports.CONNECTION_TIMEOUT);
remote.connect();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment