You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.2 KiB
83 lines
2.2 KiB
var log = require('../util/log');
|
|
var networks = require('../networks');
|
|
var Address = require('./Address');
|
|
var Peer = require('./Peer');
|
|
var PeerManager = require('./PeerManager');
|
|
var util = require('util');
|
|
var EventEmitter = require('events').EventEmitter;
|
|
var preconditions = require('preconditions').singleton();
|
|
|
|
var NetworkMonitor = function(peerman) {
|
|
preconditions.checkArgument(peerman);
|
|
this.peerman = peerman;
|
|
this.networkName = peerman.config.network;
|
|
this.init();
|
|
}
|
|
|
|
util.inherits(NetworkMonitor, EventEmitter);
|
|
|
|
NetworkMonitor.create = function(config) {
|
|
this.config = config;
|
|
var peerman = new PeerManager({
|
|
network: config.networkName
|
|
});
|
|
|
|
peerman.addPeer(new Peer(config.host, config.port));
|
|
return new NetworkMonitor(peerman);
|
|
};
|
|
|
|
NetworkMonitor.prototype.init = function() {
|
|
var self = this;
|
|
var handleInv = function(info) {
|
|
var invs = info.message.invs;
|
|
info.conn.sendGetData(invs);
|
|
};
|
|
|
|
var handleBlock = function(info) {
|
|
self.emit('block', info.message);
|
|
};
|
|
|
|
var handleTx = function(info) {
|
|
var tx = info.message.tx;
|
|
self.emit('tx', tx);
|
|
|
|
var from = tx.getSendingAddresses(self.networkName);
|
|
for (var i = 0; i < from.length; i++) {
|
|
var addr = from[i];
|
|
self.emit('out:'+addr, tx);
|
|
}
|
|
var to = tx.getReceivingAddresses(self.networkName);
|
|
for (var i = 0; i < to.length; i++) {
|
|
var addr = to[i];
|
|
self.emit('in:'+addr, tx);
|
|
}
|
|
};
|
|
|
|
this.peerman.on('connection', function(conn) {
|
|
if (self.connection) throw new Error('Cant handle more than one connection');
|
|
self.connection = conn;
|
|
conn.on('inv', handleInv);
|
|
conn.on('block', handleBlock);
|
|
conn.on('tx', handleTx);
|
|
});
|
|
};
|
|
|
|
NetworkMonitor.prototype.incoming = function(addrStr, callback) {
|
|
preconditions.checkArgument(Address.validate(addrStr));
|
|
this.on('in:'+addrStr, callback);
|
|
};
|
|
|
|
NetworkMonitor.prototype.outgoing = function(addrStr, callback) {
|
|
preconditions.checkArgument(Address.validate(addrStr));
|
|
this.on('out:'+addrStr, callback);
|
|
};
|
|
|
|
NetworkMonitor.prototype.start = function() {
|
|
this.peerman.start();
|
|
};
|
|
|
|
NetworkMonitor.prototype.stop = function() {
|
|
this.peerman.stop();
|
|
};
|
|
|
|
module.exports = NetworkMonitor;
|
|
|