diff --git a/config/default.yml b/config/default.yml index 007e6881..a5c41ca3 100644 --- a/config/default.yml +++ b/config/default.yml @@ -1,4 +1,5 @@ -NetworkMonitor: - network: livenet - host: localhost - port: 8333 +BitcoreNode: + NetworkMonitor: + network: livenet + host: localhost + port: 8333 diff --git a/index.js b/index.js index fe11a90c..0d8fe38f 100755 --- a/index.js +++ b/index.js @@ -2,25 +2,58 @@ var config = require('config'); +var util = require('util'); +var EventEmitter = require('eventemitter2').EventEmitter2; var bitcore = require('bitcore'); +var Unit = bitcore.Unit; var NetworkMonitor = require('./lib/networkmonitor'); var EventBus = require('./lib/eventbus'); +var BitcoreNode = function(bus, nm) { + var self = this; + this.bus = bus; + this.nm = nm; -var bus = new EventBus(); -var nm = NetworkMonitor.create(bus, config.get('NetworkMonitor')); + this.bus.register(bitcore.Transaction, function(tx) { + console.log('Transaction:', tx.id, 'total_out:', Unit.fromSatoshis(tx.outputAmount).toBTC()); + }); -bus.register(bitcore.Transaction, function(tx) { - console.log('Transaction:', tx.id); -}); + this.bus.register(bitcore.Block, function(block) { + console.log('Block:', block.id); + }); -bus.register(bitcore.Block, function(block) { - console.log('Block:', block.id); -}); + this.bus.onAny(function(value) { + self.emit(this.event, value); + }); + this.nm.on('error', function(err) { + self.emit('error', err); + }); +}; +util.inherits(BitcoreNode, EventEmitter); -nm.start(); +BitcoreNode.create = function(opts) { + var bus = new EventBus(); + var nm = NetworkMonitor.create(bus, opts.NetworkMonitor); + return new BitcoreNode(bus, nm); +}; + +BitcoreNode.prototype.start = function() { + this.nm.start(); +}; +if (require.main === module) { + var node = BitcoreNode.create(config.get('BitcoreNode')); + node.start(); + node.on('error', function(err) { + if (err.code === 'ECONNREFUSED') { + console.log('Connection to bitcoind failed'); + } else { + console.log('Unrecognized error: ', err); + } + }); +} +module.exports = BitcoreNode; diff --git a/lib/eventbus.js b/lib/eventbus.js index 20da9316..2859d9a8 100644 --- a/lib/eventbus.js +++ b/lib/eventbus.js @@ -5,7 +5,7 @@ var bitcore = require('bitcore'); var Promise = require('bluebird'); var $ = bitcore.util.preconditions; var _ = bitcore.deps._; -var EventEmitter = require('events').EventEmitter; +var EventEmitter = require('eventemitter2').EventEmitter2; var util = require('util'); function EventBus() { diff --git a/lib/networkmonitor.js b/lib/networkmonitor.js index 2f5a442d..e0194b2f 100644 --- a/lib/networkmonitor.js +++ b/lib/networkmonitor.js @@ -1,7 +1,7 @@ 'use strict'; var util = require('util'); -var EventEmitter = require('events').EventEmitter; +var EventEmitter = require('eventemitter2').EventEmitter2; var bitcore = require('bitcore'); var Networks = bitcore.Networks; @@ -44,6 +44,10 @@ NetworkMonitor.prototype.setupPeer = function(peer) { peer.on('block', function(m) { self.bus.process(m.block); }); + peer.on('error', function(err) { + self.emit('error', err); + }); + }; NetworkMonitor.prototype.start = function() { diff --git a/package.json b/package.json index 20437458..6ccafa87 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,8 @@ "compression": "^1.4.1", "cors": "^2.5.3", "cron": "^1.0.4", - "express": "4.11.1", + "eventemitter2": "^0.4.14", + "express": "~3.4.7", "glob": "*", "js-yaml": "^3.2.7", "leveldown": "~0.10.0", diff --git a/test/networkmonitor.js b/test/networkmonitor.js index f084e3f4..ab84dfaa 100644 --- a/test/networkmonitor.js +++ b/test/networkmonitor.js @@ -8,7 +8,7 @@ var sinon = require('sinon'); var util = require('util'); var Transaction = bitcore.Transaction; var Block = bitcore.Block; -var EventEmitter = require('events').EventEmitter; +var EventEmitter = require('eventemitter2').EventEmitter2; var NetworkMonitor = require('../lib/networkmonitor'); var EventBus = require('../lib/eventbus'); @@ -67,7 +67,7 @@ describe('NetworkMonitor', function() { it('broadcasts ready after start', function(cb) { var nm = new NetworkMonitor(busMock, peerMock); - nm.on('ready', cb) + nm.on('ready', cb); nm.start(); });