Skip to content
Snippets Groups Projects
Commit e9837ab5 authored by Robert Martin-Legene's avatar Robert Martin-Legene
Browse files

issue#4 resuelto + fastconnect

parent 38eefbfd
No related branches found
No related tags found
No related merge requests found
...@@ -107,6 +107,13 @@ module.exports = class Libbfa ...@@ -107,6 +107,13 @@ module.exports = class Libbfa
params: 0 params: 0
}] }]
}); });
w3.eth.extend({
methods: [{
name: 'bfaAdminaddPeer',
call: 'admin_addPeer',
params: 1
}]
});
w3.eth.personal.extend({ w3.eth.personal.extend({
methods: [{ methods: [{
name: 'bfalistWallets', name: 'bfalistWallets',
......
...@@ -7,29 +7,101 @@ ...@@ -7,29 +7,101 @@
const Libbfa = require( process.env.BFAHOME + '/bin/libbfa.js'); const Libbfa = require( process.env.BFAHOME + '/bin/libbfa.js');
var bfa = new Libbfa(); var bfa = new Libbfa();
var web3 = bfa.newweb3(); var web3 = bfa.newweb3();
var now;
function monitor() function pluralEnglish( num, single, plural )
{
if ( num == 1 )
return single;
return plural;
}
function peerlist()
{ {
web3.eth.bfaAdminpeers().then( web3.eth.bfaAdminpeers().then(
function gotAdminPeers( nodelist ) { function gotAdminPeers( nodelist ) {
var peers = []; var now = new Date();
var nowpeers = [];
var peers = [];
var newpeers = [];
if ( bfa.fs.existsSync( bfa.networkdir + '/peers.cache' ) )
{
var data = bfa.fs.readFileSync( bfa.networkdir + '/peers.cache' ).toString();
if ( data.length > 0 )
peers = data.split(/\r?\n/);
var i = peers.length;
// for some odd reason, I keep seeing empty entries
while ( i-- > 0 )
if ( peers[i] == '' )
peers.splice(i,1);
}
nodelist.forEach( nodelist.forEach(
function(node) { function(node) {
if ( typeof(node.protocols.eth) == 'object' ) if ( 'object' == typeof(node.protocols.eth) )
{ {
var dir = "out"; // default info - likely to get overwritten.
if ( node.network.inbound ) var info = "<" + node.id + ">";
dir = "in"; var dir = "";
peers.push( "peer "+dir+": "+node.enode ); if ( undefined != node.network )
{
if ( 'boolean' == typeof(node.network.inbound) )
{
if ( node.network.inbound )
dir = "in";
else
dir = "out";
}
if ( 'string' == typeof(node.enode) )
{
info = node.enode;
if (peers.indexOf( node.enode ) == -1 )
newpeers.push( node.enode );
}
else
{
info = "";
if ( undefined != node.id )
info += "<" + node.id + ">";
if ( undefined != node.network.remoteAddress )
{
if ( info != "" )
info+= "@";
info += node.network.remoteAddress;
}
}
}
nowpeers.push( "peer " + dir + ": " + info );
} }
} }
); );
// write network/status
bfa.fs.writeFileSync( bfa.fs.writeFileSync(
bfa.networkdir + '/status', bfa.networkdir + '/status',
"UTC: " + now.toUTCString() + "\n" "UTC: " + now.toUTCString() + "\n"
+ "BFA peers: " + peers.length + "\n" + "BFA peers: " + nowpeers.length + "\n"
+ peers.sort().join("\n") + "\n", + nowpeers.sort().join("\n") + "\n",
{ mode: 0o644 }
);
// Try to connect to a random node if we have very few peers
if ( nowpeers.length < 5 && peers.length > 0 )
{
var i = Math.floor( Math.random() * peers.length );
var enode = peers[i];
console.log(
"We have "
+ nowpeers.length
+ " peer" + pluralEnglish(nowpeers.length,'','s') + ", so will try to connect to "
+ enode
);
web3.eth.bfaAdminaddPeer( enode );
}
// write network/peers.cache
// peers.cache is a list of peers we have connected out to in the past.
peers.concat( newpeers );
if (peers.length > 100)
peers.splice( 0, peers.length - 100 );
bfa.fs.writeFileSync(
bfa.networkdir + '/peers.cache',
peers.join("\n") + "\n",
{ mode: 0o644 } { mode: 0o644 }
); );
}, },
...@@ -97,9 +169,9 @@ function mayseal() ...@@ -97,9 +169,9 @@ function mayseal()
function timer() function timer()
{ {
now = new Date(); peerlist();
monitor();
mayseal(); mayseal();
} }
peerlist();
setInterval( timer, 60 * 1000 ); setInterval( timer, 60 * 1000 );
...@@ -68,9 +68,11 @@ function startmonitor ...@@ -68,9 +68,11 @@ function startmonitor
echo "A monitor is already running." echo "A monitor is already running."
false false
) || exit ) || exit
monitor.js & (
echo $! > $pidfile monitor.js &
wait echo $! > $pidfile
wait
) 2>&1 | ${BFAHOME}/bin/log.sh ${BFANODEDIR}/log &
) 9>> $pidfile ) 9>> $pidfile
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment