Bandit228
Участник
- Сообщения
- 102
- Реакции
- 31
Сделал такой скрипт у себя, решил выложить сюда.
mon.php:
PHP:
if ($_GET['id'] == 'monitoring')
{
function source_query($ip){
$cut = explode(":", $ip);
$HL2_address = $cut[0];
$HL2_port = $cut[1];
$HL2_command = "\377\377\377\377TSource Engine Query\0";
$HL2_socket = fsockopen("udp://".$HL2_address, $HL2_port, $errno, $errstr,3);
fwrite($HL2_socket, $HL2_command);
$JunkHead = fread($HL2_socket,4);
$CheckStatus = socket_get_status($HL2_socket);
if($CheckStatus["unread_bytes"] == 0)return 0;
$do = 1;
while($do){
$str = fread($HL2_socket,1);
$HL2_stats.= $str;
$status = socket_get_status($HL2_socket);
if($status["unread_bytes"] == 0){
$do = 0;
}
}
fclose($HL2_socket);
$x = 0;
while ($x <= strlen($HL2_stats)){
$x++;
$result.= substr($HL2_stats, $x, 1);
}
$result = str_split($result);
$info['network'] = ord($result[0]);$char = 1;
while(ord($result[$char]) != "%00"){$info['name'] .= $result[$char];$char++;}$char++;
while(ord($result[$char]) != "%00"){$info['map'] .= $result[$char];$char++;}$char++;
while(ord($result[$char]) != "%00"){$info['dir'] .= $result[$char];$char++;}$char++;
while(ord($result[$char]) != "%00"){$info['description'] .= $result[$char];$char++;}$char++;
$info['appid'] = ord($result[$char].$result[($char+1)]);$char += 2;
$info['players'] = ord($result[$char]);$char++;
$info['max'] = ord($result[$char]);$char++;
$info['bots'] = ord($result[$char]);$char++;
$info['dedicated'] = ord($result[$char]);$char++;
$info['os'] = chr(ord($result[$char]));$char++;
$info['password'] = ord($result[$char]);$char++;
$info['secure'] = ord($result[$char]);$char++;
while(ord($result[$char]) != "%00"){$info['version'] .= $result[$char];$char++;}
return $info;
}
$q = source_query($ip_S.":".$port_S);
$map = $q['map'];
$players = $q['players'];
$max = $q['max'];
$percent = $players*100/$max;
if (!empty($map))
{
die("{\"map\": \"$map\",\"online\": \"$players\",\"max\": \"$max\",\"%\": \"$percent\",\"offline\": \"NO\"}");
}
if (empty($map));
{
die("
{
\"offline\": \"YES\"
}
");
}
}
Код вашего JS:
C-подобный:
document.getElementById('monitoring').innerHTML = "Загрузка информации...";
function get_monitoring() {
document.getElementById('monitoring').innerHTML = "Ждем ответа...";
$.post("mon.php?id=monitoring", {}, function(data) {
var obj = jQuery.parseJSON(data);
if (obj.offline == 'NO')
{
document.getElementById('monitoring').innerHTML = "Игроки онлайн: "+obj.online+" из "+obj.max+" | Карта: "+obj.map;
console.log ('Мониторинг загружен!');
}
else
{
document.getElementById('monitoring').innerHTML = "Ошибка при получении данных с сервера!";
console.log ('Ошибка при получении данных!');
}
});
}
HTML:
<span id='monitoring'></span>
Для работы скрипта нужен jQuery.
Извиняюсь за "интересный" способ определения сервера, скрипт мониторинга взял из паблика и с мониторингом Source опыта 0. Ну а в JS через пост мне как-то привычней.
Последнее редактирование: