AC-MrGamoo
view release on metacpan or search on metacpan
lib/AC/MrGamoo/Kibitz/Peers.pm view on Meta::CPAN
return ( inet_itoa($prefer->{ipv4}), $prefer->{port} );
}
sub _nat_init {
# determine my local NAT domain
my $nat = my_network_info();
for my $i (@$nat){
$natdom ||= $i->{natdom};
}
$natinit = 1;
}
################################################################
sub _random_peer {
my @peer;
# might be down? try again.
@peer = values %MAYBEDOWN;
# sceptical
@peer = values %SCEPTICAL unless @peer;
# known peer
unless(@peer){
@peer = values %ALLPEER;
# sometimes, randomly, use the seed peers
@peer = () unless int rand(@peer+1);
}
if( @peer ){
my $p = $peer[ rand(@peer) ];
debug("using peer $p->{server_id}");
return ($p->{server_id}, pick_best_addr_for_peer($p->{ip}));
}
# seed peer
my $seed = conf_value('seedpeer');
my $p = $seed->[ rand(@$seed) ];
my ($ip, $port) = split /:/, $p;
$port ||= my_port();
# don't talk to self. any of my addrs.
my $ipinfo = my_network_info();
for my $i (@$ipinfo){
return if $ip eq $i->{ipa} && $port == my_port();
}
debug("using seedpeer");
return("seed/$ip:$port", $ip, $port);
}
sub _kibitz_with_random_peer {
my( $id, $addr, $port ) = _random_peer();
return unless $id;
debug("starting status kibitz client to $id");
my $ok = AC::MrGamoo::Kibitz::Client->new( $addr, $port,
info => "status client: $id",
status_peer => $id,
);
__PACKAGE__->maybe_down($id, 'connect') unless $ok;
}
1;
( run in 1.759 second using v1.01-cache-2.11-cpan-99c4e6809bf )