diff --git a/config.js b/config.js index 3c5bfe6a..fc964060 100644 --- a/config.js +++ b/config.js @@ -4,7 +4,7 @@ var path = require('path'); var fs = require('fs'); var mkdirp = require('mkdirp'); -var rootPath = path.normalize(__dirname + '/..'), +var rootPath = path.normalize(__dirname), env, db, port, diff --git a/lib/logger.js b/lib/logger.js index 23680925..ba233391 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -1,5 +1,5 @@ var winston = require('winston'); -var config = require('../config/config'); +var config = require('../config'); var logger = new winston.Logger({ transports: [ @@ -10,4 +10,4 @@ var logger = new winston.Logger({ }); logger.transports.console.level = config.loggerLevel; -module.exports.logger = logger; +module.exports = logger; diff --git a/lib/networkmonitor.js b/lib/networkmonitor.js index c3256648..2cd4f151 100644 --- a/lib/networkmonitor.js +++ b/lib/networkmonitor.js @@ -2,20 +2,55 @@ var bitcore = require('bitcore'); +var Networks = bitcore.Networks; +var p2p = require('bitcore-p2p'); var Promise = require('bluebird'); var $ = bitcore.util.preconditions; var _ = bitcore.deps._; var EventEmitter = require('events').EventEmitter; var util = require('util'); var EventBus = require('./eventbus'); +var Peer = p2p.Peer; +var Messages = p2p.Messages; +var logger = require('./logger'); - -var p2p = require('bitcore-p2p'); - -function NetworkMonitor(eventBus) { +function NetworkMonitor(eventBus, opts) { $.checkArgument(eventBus instanceof EventBus); this.bus = eventBus; + + opts = opts || {}; + opts.network = opts.network || Networks.defaultNetwork; + opts.host = opts.host || 'localhost'; + opts.port = opts.port || Networks.defaultNetwork.port; + + var peer = new Peer(opts.host, opts.port, opts.network); + this.peer = peer; + this.setupPeer(peer); } util.inherits(NetworkMonitor, EventEmitter); + +NetworkMonitor.prototype.setupPeer = function(peer) { + var self = this; + + peer.on('ready', function() { + logger.info('NetworkMonitor: connected to the bitcoin network.'); + }); + peer.on('inv', function(m) { + // TODO only ask for data if tx or block is unknown + peer.sendMessage(new Messages.GetData(m.inventory)); + }); + peer.on('tx', function(m) { + self.bus.process(m.transaction); + }); + peer.on('block', function(m) { + self.bus.process(m.block); + }); +}; + +NetworkMonitor.prototype.start = function() { + this.peer.connect(); +}; + + module.exports = NetworkMonitor; diff --git a/test/networkmonitor.js b/test/networkmonitor.js index 074692fe..98437b78 100644 --- a/test/networkmonitor.js +++ b/test/networkmonitor.js @@ -3,6 +3,7 @@ var chai = require('chai'); var should = chai.should(); var sinon = require('sinon'); +var bitcore = require('bitcore'); var NetworkMonitor = require('../lib/networkmonitor'); var EventBus = require('../lib/eventbus'); @@ -10,13 +11,22 @@ var util = require('util'); var Promise = require('bluebird'); Promise.longStackTraces(); -var bus = sinon.createStubInstance(EventBus); +var bus = new EventBus(); //sinon.createStubInstance(EventBus); -describe('NetworkMonitor', function() { +describe.only('NetworkMonitor', function() { - it.only('instantiate', function() { + this.timeout(10000); + + it('instantiate', function() { var nm = new NetworkMonitor(bus); should.exist(nm); }); + it('start', function(cb) { + var nm = new NetworkMonitor(bus); + bus.register(bitcore.Transaction, function(tx) { + console.log('new tx: ', tx.id); + }); + nm.start(); + }); });