Jump to content
GIGN Forum

Server Monitoring (Web)


Recommended Posts

<style>

body {

font: normal 11px 'Tahoma';

color: #222;

background-color: #606060;

}

a {

text-decoration: none;

color: #b30000;

}

.server_map {

display: table;

width: 190px;

height: 100px;

border: 1px solid #494949;

background-repeat: no-repeat;

background-position: center center;

}

.server_map .map_overlay {

display:table-cell;

width: 190px;

height: 100px;

background: url('http://www.stn.lv/skin/mapoverlay.png') no-repeat center center;

vertical-align:middle;

text-align: left;

color: #434343;

}

</style>

<center>

<?php

//SERVERA ADRESE

$adrese = "cs.box4you.lv:27015";

//VAI JUS IZMANTOSIET MONITORU, KA INCLUDI - IEKLAUSIET LAPA, VAI NE yes/JA no/NE

$man_incluudot = "no";

//KARSU ADRESE

$adrese_mapeem = "http://image.www.gametracker.com/images/maps/160x120/cs/";

function fragsort ($a, $B) {

if ($a["frags"] == $b["frags"]) return 0;

if ($a["frags"] > $b["frags"]) {

return -1;

} else {

return 1;

}

}

Class CounterStrike {

var $m_playerinfo = "yes"; // Info about players

var $m_servervars = ""; // Info about the server current map, players etc

var $m_serverrules = ""; // Server rules

var $m_challenge = ""; // Server challenge number

//

// Get exact time, used for timeout counting

//

function timenow() {

return doubleval(ereg_replace('^0\.([0-9]*) ([0-9]*)$','\\2.\\1',microtime()));

}

//

// Read raw data from server

//

function getServerData($command,$serveraddress,$portnumber,$waittime) {

$serverdata = "";

$serverdatalen = 0;

if ($waittime< 500) $waittime= 500;

if ($waittime>2000) $waittime=2000;

$waittime=doubleval($waittime/1000.0);

if (!$cssocket = @fsockopen("udp://".$serveraddress,$portnumber,$errnr)) {

$this->errmsg="No connection";

return "";

}

socket_set_blocking($cssocket,true);

socket_set_timeout($cssocket,0,500000);

fwrite($cssocket,$command,strlen($command));

// Mark

$starttime=$this->timenow();

do {

$serverdata.=fgetc($cssocket);

$serverdatalen++;

$socketstatus=socket_get_status($cssocket);

if ($this->timenow()>($starttime+$waittime)) {

$this->errmsg = "Connection timed out";

fclose($cssocket);

return "";

}

} while ($socketstatus["unread_bytes"] );

fclose($cssocket);

return $serverdata;

}

function getnextstring(&$data) {

$temp="";

$counter=0;

while (ord($data[$counter++])!=0) $temp.=$data[$counter-1];

$data=substr($data,strlen($temp)+1);

return $temp;

}

function getnextbytevalue(&$data) {

$temp=ord($data[0]);

$data=substr($data,1);

return $temp;

}

function getnextfragvalue(&$data) {

$frags=ord($data[0])+(ord($data[1])<<8)+(ord($data[2])<<16)+(ord($data[3])<<24);

if ($frags>=4294967294) $frags-=4294967296;

$data=substr($data,4);

return $frags;

}

function getnextplaytime(&$data) {

$decnumber=ord($data[0])+(ord($data[1])<<8)+(ord($data[2])<<16)+(ord($data[3])<<24);

$binnumber=base_convert($decnumber,10,2);

while (strlen($binnumber) < 32) $binnumber="0".$binnumber;

$exp=abs(base_convert(substr($binnumber,1,8),2,10))-127;

if (substr($binnumber,0,1)=="1") $exp=0-$exp;

$man=1;$manadd=0.5;

for ($counter=9;$counter<32;$counter++) {

if (substr($binnumber,$counter,1)=="1") $man+=$manadd;

$manadd=$manadd/2;

}

$time=round(pow(2,$exp)*$man);

$playtime="";

if ($time>3600) {

$playtime=sprintf("%2d:",$time/3600);

}

$time%=3600;

$playtime=$playtime.sprintf("%2d:",$time/60);

$time%=60;

$playtime=$playtime.sprintf("%2d",$time);

$data=substr($data,5);

return $playtime;

}

// **********************************************************************

// getServerRules

// Read rules/setup from the gameserver into m_serverrules

// Return true if successful

// **********************************************************************

function getServerRules($serveraddress,$portnumber,$waittime) {

// Get a challenge number

if (!$this->getChallenge($serveraddress,$portnumber,$waittime)) return false;

// Send a request for "rules" to the server

$cmd = "\xFF\xFF\xFF\xFFV" . $this->m_challenge;

$serverdata = $this->getServerData($cmd,$serveraddress,$portnumber,$waittime);

// Check length of returned data, if < 5 something went wrong

if (strlen($serverdata)<5) return false;

// Figure out how many rules there are

$rules=(ord($serverdata[5]))+(ord($serverdata[6])*256);

if ($rules != 0) {

// Strip OOB data

$serverdata = substr($serverdata,7);

for ($i=1;$i<=$rules;$i++) {

$rulename = $this->getnextstring($serverdata);

$rulevalue = $this->getnextstring($serverdata);

$this->m_serverrules[$rulename]=$rulevalue;

}

return true;

} else {

return false;

}

}

// **********************************************************************

// getServerinfo

// Read information about the gameserver into m_servervars

// Serveraddress,servername,current map etc etc

// Return true if successful

// **********************************************************************

function getServerInfo($serveraddress,$portnumber,$waittime) {

// Send a request for "info" to the server

$cmd = "\xFF\xFF\xFF\xFFTSource Engine Query\x00";

$serverdata = $this->getServerData($cmd,$serveraddress,$portnumber,$waittime);

// Check length of returned data, if < 5 something went wrong

if (strlen($serverdata)<5) return false;

// Strip OOB data

$serverdata=substr($serverdata,6);

$this->m_servervars["serveraddress"] = $this->getnextstring($serverdata);

$this->m_servervars["servername"] = $this->getnextstring($serverdata);

$this->m_servervars["mapname"] = $this->getnextstring($serverdata);

$this->m_servervars["game"] = $this->getnextstring($serverdata);

$this->m_servervars["gamename"] = $this->getnextstring($serverdata);

$this->m_servervars["currentplayers"] = $this->getnextbytevalue($serverdata);

$this->m_servervars["maxplayers"] = $this->getnextbytevalue($serverdata);

// Get a challenge number

if (!$this->getChallenge($serveraddress,$portnumber,$waittime)) return false;

// Send a request for "rules" to the server

$cmd = "\xFF\xFF\xFF\xFFU" . $this->m_challenge;

$serverdata = $this->getServerData($cmd,$serveraddress,$portnumber,$waittime);

// Check length of returned data, if < 5 something went wrong

if (strlen($serverdata)<5) return false;

// Check number of players to read data for

$players = ord($serverdata[5]);

// Strip OOB data and other stuff

$serverdata = substr($serverdata,7);

for ($i=1;$i<=$players;$i++) {

$playername = htmlspecialchars($this->getnextstring($serverdata));

$frags = $this->getnextfragvalue($serverdata);

$playtime = $this->getnextplaytime($serverdata);

$this->m_playerinfo[$i] = array("name"=>$playername,"frags"=>$frags,"time"=>$playtime);

}

// Sort players in fragorder

if ($players>1) usort($this->m_playerinfo,"fragsort");

return true;

}

// **********************************************************************

// getChallenge

// Read a challenge number from the gameserver into m_challenge

// Return true if successful

// **********************************************************************

function getChallenge($serveraddress,$portnumber,$waittime) {

$cmd = "\xFF\xFF\xFF\xFFW";

$serverdata = $this->getServerData($cmd,$serveraddress,$portnumber,$waittime);

// Check length of returned data, if < 5 something went wrong

if (strlen($serverdata)<5) return false;

$this->m_challenge = substr($serverdata,5);

return true;

}

}

function applaunch($game) {

$game = str_replace("cstrike", "10", $game);

$game = str_replace("dod", "30", $game);

$game = str_replace("valve", "70", $game);

$game = str_replace("czero", "80", $game);

$game = str_replace("bshift", "130", $game);

$game = str_replace("dmc", "40", $game);

$game = str_replace("gearbox", "50", $game);

$game = str_replace("ricochet", "60", $game);

$game = str_replace("tfc", "20", $game);

$game = str_replace("czeror", "100", $game);

$game = str_replace("redorchestra", "1200", $game);

return $game;

}

function applaunch2($game) {

$game = str_replace("cstrike", "240", $game);

return $game;

}

function joinip($ip, $port, $game, $type) {

if($type == "HL1") {

$game = applaunch($game);

}

elseif($type == "HL2") {

$game = applaunch2($game);

}

return "<a href='steam: \"-applaunch ".$game."\" +connect ".$ip.":".$port."'>".$ip.":".$port."</a>";

}

function getMapImage($map) {

if (!file_exists("csslmore/".$map.".gif"))

{

$map = "cstrike/cstrike_nopicture";

}

return "<img border=\"1\" src=\"csslmore/".$map.".gif\">";

}

list($serverip, $serverport) = explode(":", $adrese);

$csinfo=new CounterStrike;

$status=$csinfo->getServerInfo($serverip,$serverport,1000);

if($csinfo->m_servervars["gamename"] == "?") {

$servers["servername"] = htmlentities($csinfo->m_servervars["serveraddress"]);

$servers["gamename"] = $csinfo->m_servervars["game"];

$servers["game"] = $csinfo->m_servervars["mapname"];

$servers["mapname"] = $csinfo->m_servervars["servername"];

$servers["currentplayers"] = $csinfo->m_servervars["currentplayers"];

$servers["maxplayers"] = $csinfo->m_servervars["maxplayers"];

$servers["type"] = "HL2";

}

//HL1

else {

$servers["servername"] = htmlentities($csinfo->m_servervars["servername"]);

$servers["gamename"] = $csinfo->m_servervars["gamename"];

$servers["game"] = $csinfo->m_servervars["game"];

$servers["mapname"] = $csinfo->m_servervars["mapname"];

$servers["currentplayers"] = $csinfo->m_servervars["currentplayers"];

$servers["maxplayers"] = $csinfo->m_servervars["maxplayers"];

$servers["type"] = "HL1";

}

$tag = $servers["currentplayers"];

$max = $servers["maxplayers"];

$nosaukums = $servers["servername"];

$mape = $servers["mapname"];

$statuss = $max-$tag;

if ($statuss == "1") {

$statuss = "viens brivs slots";

} else if ($statuss == "0") {

$statuss = "nav brivu slotu";

} else {

$statuss = "$statuss brivi sloti";

}

$players = "$tag/$max";

if ($man_incluudot !== "yes") {

echo '';

}

echo "

<div style='background-image: url("$adrese_mapeem".$mape.".jpg");' class='server_map'>

<div class='map_overlay'>

<div style='color:#fff;margin:5px;text-shadow:#000 1px 1px 1px;margin-top:-3px;'>".$mape."<font style='font-size:15px;margin-left:75px;color:#01ff31;'>".$tag."</font><font style='color:white;text-shadow:#000 1px 1px 1px;'> / </font></div> <div style='margin-top:-20px;'><font style='color:#ff000f;margin:5px;margin-left:151px;font-size:13px;text-shadow:#000 1px 1px 1px;'><b>".$max."</font></div><div style='margin-top:63px;'><font style='color:#fff;margin:5px;font-size:13px;text-shadow:#000 1px 1px 1px;'>".$adrese."</font></div>

</div>

</div>";

if (empty($mape)) {

echo "";

}

echo "";

if ($man_incluudot !== "yes") {

echo '

</body>

</html>

';

}

?>

</center>

Viens no prasītajiem

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...