/**
 * This is a simple script that will display network messages.
 * It users the Peer / Connection classes directly instead of
 * relying on PeerManager.
 */

// replace by require('bitcore') if you use somewhere else
var bitcore = require('../');

//bitcore.config.logger = 'debug';

var Peer = bitcore.Peer,
  Connection = bitcore.Connection;

var peer = new Peer('127.0.0.1', 8333);

var socket = peer.createConnection();

var con = new Connection(socket, peer);

con.on('error', function (msg) {
  var peer = msg.peer, err = msg.err;
  console.error('Error connecting to peer', peer.host + ':' + peer.port, '(' + err.message + ')');
});

con.on('disconnect', function (msg) {
  console.log('disconnect: ', msg);
});

con.on('connect', function (msg) {
  console.log('Connected to %s', msg.peer.host + ':' + msg.peer.port);
});

/* Listen P2P messages */

// Make a log function available to all listeners
// The log function is just like console.log except it prefixes 
// messages with [host:port]
function listen (event_name, fn) {
  con.on(event_name, function (event) {
    fn(event, function () {
      var args = Array.prototype.slice.call(arguments);
      var str = args.shift();
      str = '[%s:%s] ' + str;
      args = [ str, event.peer.host, event.peer.port ].concat(args);
      console.log.apply(console, args);
    });
  });
}

listen('getaddr', function (event, log) {
  log('Received message getaddr');
  log(event);
});

listen('verack', function (event, log) {
  log('Received message verack');
});

listen('version', function (event, log) {
  log('Received message version (%s)', event.message.version);
});

listen('addr', function (event, log) {
  log('Received message addr (%s addresses)', event.message.addrs.length);
});

listen('inv', function (event, log) {
  log('Received message inv (%s invs)', event.message.count);
  console.log(event.message.invs);
});