#!/usr/bin/perl

##########################################################################
# AthenapOClc[
#
# @NAthenalogin.exeɐڑăOClc[
#
#-------------------------------------------------------------------------
# ݒ@
# @OCIIPA|[gALȃAJEg𐳂ݒ肵܂.
# @ݒ肵 getlogincount őST[o[̐lXgA
# @getlogincount --first ňԃT[o[̐lA
# @getlogincount [servername] Ŏw肵T[o[̐l\܂
#
# @ƃR[hOŏI܂
#
##########################################################################


$loginserverip="127.0.0.1";		#OCIIP
$loginserverport=6900;			#OCĨ|[g
$loginversion=10;			#OCĨo[W
$loginaccount="s1";			#AJEg
$loginpasswd="p1";			#pX[h

$connecttimeout=10;	# ڑ^CAEg(b)

#-------------------------------ݒ肱܂-----------------------------









use IO::Socket;

$sname=$ARGV[0];


# T[o[ɐڑ
my($so,$er)=();
eval{
	$so=IO::Socket::INET->new(
		PeerAddr=> $loginserverip,
		PeerPort=> $loginserverport,
		Proto	=> "tcp",
		Timeout	=> $connecttimeout) or $er=1;
};
if($er || $@){
	print "Cant connect to login server [${loginserverip}:$loginserverport] !\n";
	exit(2);
}

#OCv
print $so pack("v V a24 a24 C",0x0064,$loginversion,$loginaccount,$loginpasswd,3);
$so->flush();

# ĂȂ
if(unpack("v", &soread(\$so,2) )!=0x0069){
	print "login error.\n";
	exit(3);
}

# pPbg̒
$plen=unpack("v",&soread(\$so,2))-4;

# AJEgXLbv
&soread(\$so,43);
$plen-=43;

# T[o[ǂݍ
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 ];
}

# ʕ\
if($sname eq "--first"){ print $slist[0][1]; }	# ԍŏ̃T[o[
elsif($sname eq ""){		# SẴT[o[̃Xg
	foreach $i(@slist){
		printf "%-20s : %5d\n",$i->[0],$i->[1];
	}
}else{				# w肵T[o[
	my($flag)=1;
	foreach $i(@slist){
		if($i->[0] eq $sname){
			print $i->[1];
			$flag=0;
		}
	}
	exit(1) if($flag);	# w肵T[o[݂Ȃ
}

# ؒf
$so->shutdown(2);
$so->close();
exit(0);

# \Pbgǂݏo֐
sub soread {
	my($so,$len)= @_;
	my($sobuf);
	if( read($$so,$sobuf,$len)<$len){
		print "socket read error.\n";
		exit(5);
	}
	return $sobuf;
};
