<?php
define('A2S_INFO', "\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00"); define('REPLY_INFO_HL1', 'm'); define('REPLY_INFO_HL2', 'I'); define('SHORT', BYTE_NUM
+ 1
); class HLSocket
{
var $_socket;
var $_split_info_hl2 = array('type' => BYTE
, 'bersion' => BYTE_NUM
, 'hostname' => STRING
, 'map' => STRING
, 'gamedir' => STRING
, 'gamedesc' => STRING
, 'appid' => SHORT
, 'unknown' => BYTE_NUM
, 'players' => BYTE_NUM
, 'max' => BYTE_NUM
, 'bots' => BYTE_NUM
, 'dedicated' => BYTE
, 'os' => BYTE
, 'passworded' => BYTE_NUM
, 'secure' => BYTE_NUM
, 'gameversion' => STRING
); var $_split_info_hl1 = array('type' => BYTE
, 'ip' => STRING
, 'hostname' => STRING
, 'map' => STRING
, 'gamedir' => STRING
, 'gamedesc' => STRING
, 'players' => BYTE_NUM
, 'max' => BYTE_NUM
, 'version' => BYTE_NUM
, 'dedicated' => BYTE
, 'os' => BYTE
, 'passworded' => BYTE_NUM
, 'secure' => BYTE_NUM
, 'gameversion' => STRING
); function HLSocket($host, $port)
{
$this->connect($host, $port);
$this->port = $port;
$this->host = $host;
}
function connect($host, $port)
{
$this->_socket
= @fsockopen('udp://'.$host, $port); if (!$this->_socket)
echo 'Error met connecten'; }
function close()
{
}
function details()
{
$this->write(A2S_INFO);
$data = $this->read();
{
case REPLY_INFO_HL1:
$res = $this->split($this->_split_info_hl1, $data);
break;
case REPLY_INFO_HL2:
$res = $this->split($this->_split_info_hl2, $data);
break;
}
return $res;
}
function write($msg)
{
}
function read()
{
$data = fread($this->_socket
, 1
); if (isset($status['unread_bytes']) && $status['unread_bytes'] > 0
) $data .= fread($this->_socket
, $status['unread_bytes']); }
function splititem($type, &$data) {
$add = '';
switch ($type)
{
case BYTE:
break;
case BYTE_NUM:
$add = ord
(substr($data, 0
, 1
)); break;
case SHORT:
$add = ord
(substr($data, 0
, 1
)); break;
case LONG:
$add = ord
(substr($data, 0
, 1
)); break;
case STRING:
do
{
if ($char != "\x00")
$add .= $char;
}
while ($char != "\x00");
break;
}
return $add;
}
function split($array, $data) {
foreach ($array as $k=>$v)
$res[$k] = $this->splititem($v, $data);
return $res;
}
}
?>