use Tk; ################################################################################ # GUI frontend for qstat (www.qstat.org) # # Author: Pavel Shalashov (pshalashov@mera.ru) # # Version history: # 0.1 - supports only Half-Life servers # ################################################################################ $server = "cs.sandy.ru"; $qstatExe = "qstat.exe"; $qstatPath = ""; #query the server every 10sec $pollInterval = 10000; $players = ""; $map = ""; sub refresh_stat { $qstat = `$qstatPath$qstatExe -hls $server`; print $qstat; if ($qstat =~ /no response/) { $lPlayers->configure(text => "Players: no response"); $lMap->configure(text => "Map: no response"); return; } if ($qstat =~ /ERROR <(.*)>/) { $lPlayers->configure(text => "Players: $1"); $lMap->configure(text => "Map: $1"); return; } $qstat =~ /(.*)+?\n([A-Za-z0-9\.]*)\s*([0-9\/]*)\s*([A-Za-z0-9_]*)\s/; if ($players ne $3) { $players = $3; $lPlayers->configure(text => "Players: $players"); } if ($map ne $4) { $map = $4; $lMap->configure(text => "Map: $map"); } } # ------------------------------------------------------- # Get command line arguments # ------------------------------------------------------- if (defined($ARGV[0])) { $server = $ARGV[0]; } # ------------------------------------------------------- # Create a main window # ------------------------------------------------------- $top = MainWindow->new(); $top->title ("qstat GUI"); # ------------------------------------------------------- # Instantiate widgets and arrange them # ------------------------------------------------------- $lServer = $top->Label(text => "Server: $server", anchor => 'n', relief => 'groove', width => 26, height => 1); $lServer->pack(); $lPlayers = $top->Label(text => "Players: $players", anchor => 'n', relief => 'groove', width => 26, height => 1); $lPlayers->pack(); $lMap = $top->Label(text => "Map: $map", anchor => 'n', relief => 'groove', width => 26, height => 1); $lMap->pack(); refresh_stat(); # ------------------------------------------------------- # Set timer for quering stats from server # ------------------------------------------------------- $top->repeat($pollInterval, \&refresh_stat); # ------------------------------------------------------- # Sit in an infinite loop dispatching incoming events. # ------------------------------------------------------- MainLoop();