ripple/ripple-rest

View on GitHub
api/lib/remote.js

Summary

Maintainability
A
1 hr
Test Coverage
'use strict';
var ripple = require('ripple-lib');

function noop() {
  return;
}

var defaultLogger = {
  debug: noop,
  info: noop,
  warn: noop,
  error: noop
};

function createRemote(options) {
  var remote = new ripple.Remote(options);
  if (options.mock) {
    return remote;
  }
  var logger = options.logger || defaultLogger;
  var connect = remote.connect;
  var connected = false;

  function ready() {
    if (!connected) {
      logger.info('[RIPD] Connection established');
      connected = true;
    }
  }

  remote.connect = function() {
    logger.info('[RIPD] Attempting to connect to the Ripple network...');
    connect.apply(remote, arguments);
  };

  remote.on('error', function(err) {
    logger.error('[RIPD] error: ', err);
  });

  remote.on('disconnect', function() {
    logger.info('[RIPD] Disconnected from the Ripple network');
    connected = false;
  });

  remote._servers.forEach(function(server) {
    server.on('connect', function() {
      logger.info('[RIPD] Connected to rippled server:', server.getServerID());
      server.once('ledger_closed', ready);
    });
    server.on('disconnect', function() {
      logger.info('[RIPD] Disconnected from rippled server:',
        server.getServerID());
    });
  });

  process.on('SIGHUP', function() {
    logger.info('Received signal SIGHUP, reconnecting to Ripple network');
    remote.reconnect();
  });

  setInterval(function() {
    var pingRequest = remote.request('ping');
    pingRequest.on('error', function() {});
    pingRequest.broadcast();
  }, 1000 * 15);

  remote.connect();
  return remote;
}

module.exports = createRemote;