#!/usr/bin/perl

BEGIN {
    unshift(@INC,'/var/cpanel/cpgs','/var/cpanel/cpgs/games');
};

use IPC::Open2;
use Storable qw(nfreeze thaw);
use cPGSLib;

my $act = $ARGV[0];
my $user = $ARGV[1];
my $game = $ARGV[2];
my $srvn = $ARGV[3];
my $restart = $ARGV[4];

if( ! $act ) {
    msglog("Missing a required argument. action($act) user($user) game($game) srvn($srvn)");
    show_help();
    exit(0);
}

if($srvn && $srvn !~ /^\d+$/) {
    msglog("Missing a required argument. action($act) user($user) game($game) srvn($srvn)");
    show_help();
    exit(0);
}

if($act eq 'stop') {
    stopsrv();
} elsif($act eq 'start') {
    startsrv();
} elsif($act eq 'restart') {
    stopsrv();
    sleep(2);
    $restart = 1;
    startsrv();
} elsif($act eq 'limitcheck') {
    limitcheck();
} else {
    msglog("Unknown action: $act (stop|start|restart)");
}

exit(0);

###############################################################################
######[ subroutines ]##########################################################
###############################################################################

sub stopsrv {
    my %meta;
    my %data;
    $meta{'command'} = 'stopserver';
    $meta{'remip'} = '127.0.0.1';
    $meta{'remuser'} = 'cpgs_admin';
    $meta{'user'} = $user;
    $meta{'game'} = $game;
    $meta{'srvn'} = $srvn;
    $meta{'verbose'} = 1;
    my $rp = cPGSLib::sendssl(\%meta,\%data);
    if($$rp{'retcode'} == 0) {
        msglog($$rp{'retmsg'});
    } else {
        msglog($$rp{'errmsg'});
    }
}

sub startsrv {
    my $calling_user = getpwuid($<);
    if($calling_user ne 'root' and $calling_user ne $user) {
        msglog("Ignoring server start request from $calling_user for $user $game $srvn");
        return("User check failed");
    }
    my %meta;
    my %data;
    $meta{'command'} = 'singleisrunning';
    $meta{'remip'} = '127.0.0.1';
    $meta{'remuser'} = 'cpgs_admin';
    $meta{'user'} = $user;
    $meta{'game'} = $game;
    $meta{'srvn'} = $srvn;
    my $rp = cPGSLib::sendssl(\%meta,\%data);
    if($$rp{'retcode'} == 0) {
        if($$rp{'status'} eq 'Down') {
            $meta{'command'} = 'startserver';
            $data{'restart'} = $restart;
            my $rp = cPGSLib::sendssl(\%meta,\%data);
            if($$rp{'retcode'} == 0) {
                msglog($$rp{'retmsg'});
            } else {
                msglog($$rp{'errmsg'});
            }
        }
    } else {
        msglog("Could not connect to 127.0.0.1 to check status for $user / $game / $srvn");
    }
}

sub msglog {
    my($msg)=@_;
    $msg =~ s/(\r|\n)//g;
    my $time=time;
    my $localtime=localtime($time);
    print "\[$localtime\] ($0) " . $msg . "\n";
}

sub show_help {
    print "Usage:\n\n\t$0 <action> <user> <game> <install #> <restart>\n\nex:\t$0 start username cstrikesrc 0 0\n\n";
}
