#!/usr/bin/perl

use strict;
use warnings;
use IO::Socket;

# --- Config -------------------------------------------------------------------
#       nick    =>      ip,     udp,    password
my %servers = (
        'cpm'   => [ '172.23.37.11', 27960, 'le_rcon_pwd' ],
        'vq3'   => [ '172.23.37.12', 27960, 'le_rcon_pwd' ],
);
# --- /Config ------------------------------------------------------------------

sub rcon ($$) {
        my ($nick, $cmd) = @_;
        my $host = $servers{$nick}->[0];
        my $port = $servers{$nick}->[1];
        my $servaddr = sockaddr_in( $port, inet_aton($host) );
        my $client = new IO::Socket(
                Domain  => PF_INET,
                Proto   => 'udp',
        ) or die "Unable to create client: $!\n";

        $client->send( "\xFF\xFF\xFF\xFFrcon $servers{$nick}->[2] $cmd", 0, $servaddr )
                or die "Error sending command: $!\n";

        my $answer = '';
        $client->recv( $answer, 1024, 0 );
        $answer =~ s/^....print\n//x;   #clean up the $answer
        return "$answer";
}

my $server = shift || die "usage: $0 <server> [action]\n";
my $action = shift || "status";

my $data = rcon($server, "$action");
print "$data\n";
exit;

