simplified example for peer discovery, added some debug output to discoverPeers(), made Peer reference the connection created from createConnection()
This commit is contained in:
parent
76247ff532
commit
e82867007e
|
@ -2,14 +2,10 @@ var PeerManager = require('../lib/PeerManager');
|
||||||
var peerman = new PeerManager();
|
var peerman = new PeerManager();
|
||||||
|
|
||||||
peerman.discoverPeers(function(err, peers) {
|
peerman.discoverPeers(function(err, peers) {
|
||||||
// we get an array of peer instances
|
|
||||||
console.log(peers);
|
|
||||||
// the peer manager caches the tried seeds and any results
|
|
||||||
console.log(peerman.seeds);
|
|
||||||
// we can use this array of peers to add to the manager
|
// we can use this array of peers to add to the manager
|
||||||
peers.forEach(function(p) {
|
// but let's limit it to 6 connections for this example
|
||||||
peerman.addPeer(p);
|
var p = 0;
|
||||||
});
|
do { peerman.addPeer(peers[p]); p++; } while (p <= 6);
|
||||||
// then we can start the manager
|
// then we can start the manager
|
||||||
peerman.start();
|
peerman.start();
|
||||||
});
|
});
|
||||||
|
|
|
@ -34,8 +34,8 @@ function Peer(host, port, services) {
|
||||||
Peer.IPV6_IPV4_PADDING = new Buffer([0,0,0,0,0,0,0,0,0,0,255,255]);
|
Peer.IPV6_IPV4_PADDING = new Buffer([0,0,0,0,0,0,0,0,0,0,255,255]);
|
||||||
|
|
||||||
Peer.prototype.createConnection = function () {
|
Peer.prototype.createConnection = function () {
|
||||||
var c = Net.createConnection(this.port, this.host);
|
this.connection = Net.createConnection(this.port, this.host);
|
||||||
return c;
|
return this.connection;
|
||||||
};
|
};
|
||||||
|
|
||||||
Peer.prototype.getHostAsBuffer = function () {
|
Peer.prototype.getHostAsBuffer = function () {
|
||||||
|
|
|
@ -26,6 +26,13 @@ function PeerManager(config) {
|
||||||
this.interval = 5000;
|
this.interval = 5000;
|
||||||
this.minConnections = 8;
|
this.minConnections = 8;
|
||||||
this.minKnownPeers = 10;
|
this.minKnownPeers = 10;
|
||||||
|
|
||||||
|
// keep track of tried seeds and results
|
||||||
|
this.seeds = {
|
||||||
|
resolved: [],
|
||||||
|
failed: [],
|
||||||
|
results: {}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
PeerManager.parent = imports.parent || require('events').EventEmitter;
|
PeerManager.parent = imports.parent || require('events').EventEmitter;
|
||||||
|
@ -219,13 +226,6 @@ PeerManager.prototype.discoverPeers = function(callback) {
|
||||||
var networks = imports.networks || require('../networks')[this.config.network];
|
var networks = imports.networks || require('../networks')[this.config.network];
|
||||||
var seeds = networks.dnsSeeds;
|
var seeds = networks.dnsSeeds;
|
||||||
|
|
||||||
// keep track of tried seeds and results
|
|
||||||
self.seeds = {
|
|
||||||
resolved: [],
|
|
||||||
failed: [],
|
|
||||||
results: {}
|
|
||||||
};
|
|
||||||
|
|
||||||
var dnsExecutor = seeds.map(function(seed) {
|
var dnsExecutor = seeds.map(function(seed) {
|
||||||
return function(done) {
|
return function(done) {
|
||||||
// have we already resolved this seed?
|
// have we already resolved this seed?
|
||||||
|
@ -234,16 +234,19 @@ PeerManager.prototype.discoverPeers = function(callback) {
|
||||||
return done(null, self.seeds.results[seed]);
|
return done(null, self.seeds.results[seed]);
|
||||||
}
|
}
|
||||||
// has this seed failed to resolve?
|
// has this seed failed to resolve?
|
||||||
if (~self.seeds.resolved.indexOf(seed)) {
|
if (~self.seeds.failed.indexOf(seed)) {
|
||||||
// if so, pass back empty results
|
// if so, pass back empty results
|
||||||
return done(null, []);
|
return done(null, []);
|
||||||
}
|
}
|
||||||
// otherwise resolve the dns seed to get some peers
|
// otherwise resolve the dns seed to get some peers
|
||||||
|
log.info('resolving dns seed '+ seed);
|
||||||
dns.resolve(seed, function(err, peers) {
|
dns.resolve(seed, function(err, peers) {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
log.err('failed to resolve dns seed '+ seed, err);
|
||||||
self.seeds.failed.push(seed);
|
self.seeds.failed.push(seed);
|
||||||
return done(null, []);
|
return done(null, []);
|
||||||
}
|
}
|
||||||
|
log.info('found '+ peers.length + ' peers from ' + seed);
|
||||||
self.seeds.resolved.push(seed);
|
self.seeds.resolved.push(seed);
|
||||||
self.seeds.results[seed] = peers;
|
self.seeds.results[seed] = peers;
|
||||||
return done(null, peers);
|
return done(null, peers);
|
||||||
|
|
Loading…
Reference in New Issue