diff options
Diffstat (limited to 'src/tool/getlogincount')
-rw-r--r-- | src/tool/getlogincount | 122 |
1 files changed, 0 insertions, 122 deletions
diff --git a/src/tool/getlogincount b/src/tool/getlogincount deleted file mode 100644 index 45c6f81..0000000 --- a/src/tool/getlogincount +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/perl -w - -########################################################################## -# INFORMATION TOOL ABOUT THE # OF ONLINE PLAYERS ON ATHENA SERVERS -# -# By connection on the athena login-server, this software displays the -# number of online players. -# -#------------------------------------------------------------------------- -# Software usage: -# Configure the IP, the port and a valid account of the server. -# After, use at your choice: -# ./getlogincount - display the number of online players on all servers. -# ./getlogincount --premier or -# ./getlogincount --first -- display the number of online players of the -# first server in the received list. -# ./getlogincount [servername] -- display the number of online players -# of the specified server. -# -# If successfull, the software return the value 0. -# -########################################################################## - -#------------------------------ CONFIGURATION ---------------------------- - -$loginserverip = "127.0.0.1"; # IP of the login-server -$loginserverport = 6900; # port of the login-server -$loginaccount = "s1"; # a valid account name -$loginpasswd = "p1"; # the password of the valid account name - -$connecttimeout = 10; # Connection timeout (in seconds) - -#------------------------------------------------------------------------- - -use IO::Socket; - -my($sname) = $ARGV[0]; -if (!defined($sname)) { - $sname = ""; -} - -# Connection to the login-server -my($so,$er) = (); -eval{ - $so = IO::Socket::INET->new( - PeerAddr=> $loginserverip, - PeerPort=> $loginserverport, - Proto => "tcp", - Timeout => $connecttimeout) or $er=1; -}; -if($er || $@){ - print "Can't not connect to the login-server [${loginserverip}:$loginserverport] !\n"; - exit(2); -} - -# Request to connect on login-server -print $so pack("v V a24 a24 C",0x0064,9,$loginaccount,$loginpasswd,3); -$so->flush(); - -# Fail to connect -if(unpack("v", &soread(\$so,2)) != 0x0069) { - print "Login error.\n"; - exit(3); -} - -# Get length of the received packet -my($plen) = unpack("v",&soread(\$so,2))-4; - -# Suppress information of the account (we need only information about the servers) -&soread(\$so,43); -$plen -= 43; - -# Check about the number of online servers -if ($plen < 32) { - printf "No server is connected to login-server.\n"; - exit(1); -} - -# Read information of the servers -my(@slist) = (); -for(;$plen > 0;$plen -= 32) { - my($name,$count) = unpack("x6 a20 V",&soread(\$so,32)); - $name = substr($name,0,index($name,"\0")); - push @slist, [ $name, $count ]; -} - -# Display the result -if($sname eq "--first" || $sname eq "--premier") { # If we ask only for the first server - printf "%-20s : %5d\n",$slist[0][0],$slist[0][1]; -} elsif ($sname eq "") { # If we ask for all servers - foreach $i(@slist) { - printf "%-20s : %5d\n",$i->[0],$i->[1]; - } -} else { # If we ask for a specified server (by its name) - my($flag) = 1; - foreach $i(@slist) { - if($i->[0] eq $sname) { - printf "%-20s : %5d\n",$i->[0],$i->[1]; - $flag = 0; - } - } - if($flag) { # If the server doesn't exist - printf "The server [$sname] doesn't exist.\n"; - exit(1); - } -} - -# End of the software -$so->shutdown(2); -$so->close(); -exit(0); - -# Sub-function: get data from the socket -sub soread { - my($so,$len) = @_; - my($sobuf); - if(read($$so,$sobuf,$len) < $len) { - print "Socket read error.\n"; - exit(5); - } - return $sobuf; -}; |