//timeout after 5 seconds
socket_set_option($socket, SOL_SOCKET,
SO_RCVTIMEO, array('sec'=>5,'usec'=>0));
socket_set_option($socket, SOL_SOCKET,
SO_RCVTIMEO, array('sec'=>5,'usec'=>0));
//connect to the RtCW master server
if(!socket_connect($socket, 'wolfmaster.idsoftware.com', 27950))
{
print("Couldn't connect: " .
socket_strerror(socket_last_error()) . "\n");
}
if(!socket_connect($socket, 'wolfmaster.idsoftware.com', 27950))
{
print("Couldn't connect: " .
socket_strerror(socket_last_error()) . "\n");
}
//send request for servers
socket_write($socket, "\xFF\xFF\xFF\xFFgetservers\x00");
socket_write($socket, "\xFF\xFF\xFF\xFFgetservers\x00");
//get servers
$server = array();
while(FALSE !== ($line = @socket_read($socket, 4096)))
{
//parse data
for($i=22; ($i+5) < strlen($line); $i += 7)
{
$ip = ord(substr($line, $i+1, 1)) . '.' .
ord(substr($line, $i+2, 1)) . '.' .
ord(substr($line, $i+3, 1)) . '.' .
ord(substr($line, $i+4, 1));
$server = array();
while(FALSE !== ($line = @socket_read($socket, 4096)))
{
//parse data
for($i=22; ($i+5) < strlen($line); $i += 7)
{
$ip = ord(substr($line, $i+1, 1)) . '.' .
ord(substr($line, $i+2, 1)) . '.' .
ord(substr($line, $i+3, 1)) . '.' .
ord(substr($line, $i+4, 1));
$port = (ord(substr($line, $i+5, 1)) * 256) +
ord(substr($line, $i+6, 1));
ord(substr($line, $i+6, 1));
$server[] = array('ip'=>$ip, 'port'=>$port);
}
}
}
}
print("<h1>" . count($server) . " Servers</h1>\n");
//loop over servers, getting status
foreach($server as $s)
{
print("<h1>{$s['ip']}:{$s['port']}</h1>\n");
foreach($server as $s)
{
print("<h1>{$s['ip']}:{$s['port']}</h1>\n");
//connect to RtCW server
if(!socket_connect($socket, $s['ip'], $s['port']))
{
print("<p>\n" .
socket_strerror(socket_last_error()) .
"\n</p>\n");
continue;
}
if(!socket_connect($socket, $s['ip'], $s['port']))
{
print("<p>\n" .
socket_strerror(socket_last_error()) .
"\n</p>\n");
continue;
}
//send request for status
socket_write($socket, "\xFF\xFF\xFF\xFFgetstatus\x00");
socket_write($socket, "\xFF\xFF\xFF\xFFgetstatus\x00");
//get status from server
if(FALSE === ($line = @socket_read($socket, 1024)))
{
print("<p>\n" .
socket_strerror(socket_last_error()) .
"\n</p>\n");
continue;
}
if(FALSE === ($line = @socket_read($socket, 1024)))
{
print("<p>\n" .
socket_strerror(socket_last_error()) .
"\n</p>\n");
continue;
}
$part = explode("\n", $line);
//settings are in second line separated by backslashes
$setting = explode("\\", $part[1]);
$setting = explode("\\", $part[1]);
print("<h2>Configuration</h2>\n");
print("<p>\n");
for($s=1; $s < count($setting); $s += 2)
{
print("\t\t{$setting[$s]} = {$setting[$s+1]}<br>\n");
}
print("</p>\n");
print("<h2>Players</h2>\n");
$lastPlayer = count($part) - 1;
for($p=2; $p < $lastPlayer; $p++)
{
$player = explode(" ", $part[$p]);
print("{$player[2]} Score={$player[0]} " .
"Ping={$player[1]}<br>\n");
}
print("</p>\n");
ob_flush();
}
print("</table>\n");
print("<p>\n");
for($s=1; $s < count($setting); $s += 2)
{
print("\t\t{$setting[$s]} = {$setting[$s+1]}<br>\n");
}
print("</p>\n");
print("<h2>Players</h2>\n");
$lastPlayer = count($part) - 1;
for($p=2; $p < $lastPlayer; $p++)
{
$player = explode(" ", $part[$p]);
print("{$player[2]} Score={$player[0]} " .
"Ping={$player[1]}<br>\n");
}
print("</p>\n");
ob_flush();
}
print("</table>\n");
