Hab vor einer weile mal eine Klasse dafür geschrieben. Ich habe sie für dich schnell angepasst (aber nicht getestet).
Ausserdem schreibe ich den Status jede Minute in ein File. Wenn man nämlich das Script bei jedem aufruf ausführt, flooded man sozusagen seine eigenen Services.
Soll heissen ich lade deine Seite immer wieder neu, und jedes mal wird ein Socket geöffnet. Beim WorldManager endet es damit, das er jedes mal einen neuen Spieler hinzufügt.
PHP Code:
<?
class fiesta_status_class {
var $pathToFile = "file/status/server.txt";
var $serverAddress = "127.0.0.1";
var $serverPort = array("9005", "9010", "9100", "9101");
public function checkStatus() {
$status = true;
for ($i = 0; $i < count($this -> serverPort); $i++) {
$status &= $this -> getStatus($this -> serverPort[$i], $this -> serverAddress);
}
return returnOnlineStatus($status);
}
private function getStatus($port, $ip) {
if ( (time() - filemtime($pathToFile)) / 60 > 1) {
$status = $this -> getServiceStatus($ip, $port);
$fileWriter = fopen($pathToFile, "w+");
fwrite($fileWriter, $status);
fclose ($fileWriter);
} else {
$fileWriter = fopen($pathToFile, "r");
while(!feof($fileWriter)) {
$status = fgets($fileWriter);
}
fclose ($fileWriter);
}
return $status;
}
private function getServiceStatus($ip, $port) {
$socketAccept = @fsockopen($ip, $port, $errno, $errstr, 2);
if ($socketAccept) {
return true;
} else {
return false;
}
}
private function returnOnlineStatus($status) {
//$infoArray = array('<font color='#ff0000'>Offline</font>', '<font color='#11c908'>Online</font>');
$infoArray = array('OFFLINE', 'ONLINE');
if (!$status) {
return $infoArray[0];
} else {
return $infoArray[1];
}
}
}
?>