WebManN
23.01.2008, 04:25
Здравствуйте, уважаемые форумчане!
Пришел к Вам с непростым вопросом.
Интересует простой скрипт для проверки сервера, уже есть функция, публиковавшаяся уважаемыми людьми на этом форуме, но она не всегда работает и глючит:
function GetServerInfo($server,$port) {
$fp = @fsockopen("udp://".$server, $port);
if (!$fp) return false;
@fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x 45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00 ".chr(10));
$start=time();
socket_set_timeout($fp,1);
$st=fread($fp,1);
$r=socket_get_status($fp);
$r=$r["unread_bytes"];
if ($r == 0) { @fclose($fp); return false;}
$st.=fread($fp,$r);
@fclose($fp);
$st=substr($st,5);
$address=SubStr($st,0,StrPos($st,chr(0)));
$address=str_replace(chr(0),"|",$address);
$st=SubStr($st,StrPos($st,chr(0))+1);
$name=SubStr($st,0,StrPos($st,chr(0)));
$st=SubStr($st,StrPos($st,chr(0))+1);
$map=SubStr($st,0,StrPos($st,chr(0)));
$st=SubStr($st,StrPos($st,chr(0))+1);
$st=SubStr($st,StrPos($st,chr(0))+1);
$st=SubStr($st,StrPos($st,chr(0))+1);
$current=ord(SubStr($st,0,1));
$max=ord(SubStr($st,1,1));
if ($map == "") return false;
$result['map'] = $map;
$result['name']= $name;
$result['current'] = $current;
$result['max'] = $max;
return $result;
}
Обращаюсь к Вам, как к профессионалам, с просьбой.
Меня, если чесно, интересует мониторинг не CS, а Team Fortress 2. Но если по CS еще можно найти хоть какую-то информацию, то по TF2 это бессмысленно.
То есть фактически все функции подобного вида посылают UDP запрос. А далее, нужно написать лишь парсер, который правильно будет обрабатывать ответ. Но проблема в том, что я с этим не сталкивался, поэтому и прошу Вас помочь.
Рад буду увидеть любую информацию по этому поводу.
Заранее спасибо всем за ответы.
Пришел к Вам с непростым вопросом.
Интересует простой скрипт для проверки сервера, уже есть функция, публиковавшаяся уважаемыми людьми на этом форуме, но она не всегда работает и глючит:
function GetServerInfo($server,$port) {
$fp = @fsockopen("udp://".$server, $port);
if (!$fp) return false;
@fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x 45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00 ".chr(10));
$start=time();
socket_set_timeout($fp,1);
$st=fread($fp,1);
$r=socket_get_status($fp);
$r=$r["unread_bytes"];
if ($r == 0) { @fclose($fp); return false;}
$st.=fread($fp,$r);
@fclose($fp);
$st=substr($st,5);
$address=SubStr($st,0,StrPos($st,chr(0)));
$address=str_replace(chr(0),"|",$address);
$st=SubStr($st,StrPos($st,chr(0))+1);
$name=SubStr($st,0,StrPos($st,chr(0)));
$st=SubStr($st,StrPos($st,chr(0))+1);
$map=SubStr($st,0,StrPos($st,chr(0)));
$st=SubStr($st,StrPos($st,chr(0))+1);
$st=SubStr($st,StrPos($st,chr(0))+1);
$st=SubStr($st,StrPos($st,chr(0))+1);
$current=ord(SubStr($st,0,1));
$max=ord(SubStr($st,1,1));
if ($map == "") return false;
$result['map'] = $map;
$result['name']= $name;
$result['current'] = $current;
$result['max'] = $max;
return $result;
}
Обращаюсь к Вам, как к профессионалам, с просьбой.
Меня, если чесно, интересует мониторинг не CS, а Team Fortress 2. Но если по CS еще можно найти хоть какую-то информацию, то по TF2 это бессмысленно.
То есть фактически все функции подобного вида посылают UDP запрос. А далее, нужно написать лишь парсер, который правильно будет обрабатывать ответ. Но проблема в том, что я с этим не сталкивался, поэтому и прошу Вас помочь.
Рад буду увидеть любую информацию по этому поводу.
Заранее спасибо всем за ответы.