BalanceOfPower

 view release on metacpan or  search on metacpan

lib/BalanceOfPower/Role/WebMaster.pm  view on Meta::CPAN

}

sub collect_api_data
{
    my $self = shift;
    my $game = shift;
    $self->manage_web_players($game);
    $self->manage_stock_orders($game);
    $self->manage_influence_orders($game);
}

sub manage_stock_orders
{
    my $self = shift;
    my $game = shift;
    foreach my $p (@{$self->players})
    {
        my $password = $self->admin_password;
        my $user = $p->name;
        my $call = "/api/$game/stock-orders?player=$user&password=$password";
        my $orders = $self->get_web_data($call);
        if(defined $orders)
        {
            say "$game - Stock orders for $user retrieved";
            for(@{$orders})
            {
                $self->get_player($p->name)->add_stock_order($_); 
            }
        }
        else
        {
            say "$game - Stock orders for $user NOT retrieved";
        }
    }
}
sub manage_influence_orders
{
    my $self = shift;
    my $game = shift;
    foreach my $p (@{$self->players})
    {
        my $password = $self->admin_password;
        my $user = $p->name;
        my $call = "/api/$game/influence-orders?player=$user&password=$password";
        my $orders = $self->get_web_data($call);
        if(defined $orders)
        {
            say "$game - Influence orders for $user retrieved";
            for(@{$orders})
            {
                $self->get_player($p->name)->add_control_order($_->{nation}, $_->{command});
            }
        }
        else
        { 
            say "$game - Orders for $user NOT retrieved";
        }  
    }
}

sub update_web_players
{
    my $self = shift;
    my $game = shift;
    my $password = $self->admin_password;
    my @players = @{$self->players};
    foreach my $p (@players)
    {
        my $res = $self->post_web_data("/api/$game/user-data", { password => $password,
                                                                 player => $p->name,
                                                                 money => $p->money,
                                                                 position => $p->position });
        say "$game - Updating " . $p->name. ": " . $res;
    }
}

sub get_web_data
{
    my $self = shift;
    my $call = shift;
    my $bare = shift || 0;
    my $ua = LWP::UserAgent->new;
    $ua->timeout(10);
    $ua->env_proxy;
    my $response = $ua->get($self->api_url . $call);

    
    if ($response->is_success) {
        if($bare)
        {
            return $response->decoded_content;
        }
        else
        {
            my $json = JSON->new->allow_nonref;
            return $json->decode( $response->decoded_content );
        }
    }
    else {
        return undef;
    }
}

sub post_web_data
{
    my $self = shift;
    my $call = shift;
    my $form = shift;
    my $ua = LWP::UserAgent->new;
    $ua->timeout(10);
    $ua->env_proxy;
    my $response = $ua->post($self->api_url . $call, $form);
    return $response->code;
}

1;




( run in 0.467 second using v1.01-cache-2.11-cpan-39bf76dae61 )