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 )