2023-03-04 23:45:46 +00:00
|
|
|
<?php
|
2023-05-05 01:17:19 +00:00
|
|
|
if (!DEFINED('EGP'))
|
|
|
|
exit(header('Refresh: 0; URL=http://' . $_SERVER['SERVER_NAME'] . '/404'));
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
include(LIB . 'games/scans.php');
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
class scan extends scans
|
|
|
|
{
|
|
|
|
public static function mon($id, $players_get = false)
|
2023-03-05 13:59:34 +00:00
|
|
|
{
|
2023-05-05 01:17:19 +00:00
|
|
|
global $cfg, $sql, $html, $mcache;
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
include(LIB . 'games/query/Buffer.php');
|
|
|
|
include(LIB . 'games/query/BaseSocket.php');
|
|
|
|
include(LIB . 'games/query/Socket.php');
|
|
|
|
include(LIB . 'games/query/SourceQuery.php');
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$sq = new SourceQuery();
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
if ($players_get)
|
|
|
|
$nmch = 'server_scan_mon_pl_' . $id;
|
|
|
|
else
|
|
|
|
$nmch = 'server_scan_mon_' . $id;
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
if (is_array($mcache->get($nmch)))
|
|
|
|
return $mcache->get($nmch);
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$out = array();
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$info = scan::info($sq, $id);
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$sql->query('SELECT `game`, `name`, `map`, `online`, `players`, `status`, `time`, `overdue` FROM `servers` WHERE `id`="' . $id . '" LIMIT 1');
|
|
|
|
$server = $sql->get();
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$out['time'] = 'Арендован до: ' . date('d.m.Y - H:i', $server['time']);
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
if ($server['status'] == 'overdue')
|
|
|
|
$out['time_end'] = 'Удаление через: ' . sys::date('min', $server['overdue'] + $cfg['server_delete'] * 86400);
|
|
|
|
else
|
|
|
|
$out['time_end'] = 'Осталось: ' . sys::date('min', $server['time']);
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
if (!$info['status']) {
|
|
|
|
$out['name'] = $server['name'];
|
|
|
|
$out['status'] = sys::status($server['status'], $server['game'], $server['map']);
|
|
|
|
$out['online'] = $server['online'];
|
|
|
|
$out['image'] = '<img src="' . sys::status($server['status'], $server['game'], $server['map'], 'img') . '">';
|
|
|
|
$out['buttons'] = sys::buttons($id, $server['status']);
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
if ($players_get)
|
|
|
|
$out['players'] = base64_decode($server['players']);
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$mcache->set($nmch, $out, false, $cfg['mcache_server_mon']);
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
return $out;
|
|
|
|
}
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
if ($players_get)
|
|
|
|
$players = scan::info($sq, $id, true);
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$out['name'] = htmlspecialchars($info['name']);
|
|
|
|
$out['status'] = sys::status('working', $server['game'], $info['map']);
|
|
|
|
$out['online'] = $info['online'];
|
|
|
|
$out['image'] = '<img src="' . sys::status('working', $server['game'], $info['map'], 'img') . '">';
|
|
|
|
$out['buttons'] = sys::buttons($id, 'working');
|
|
|
|
$out['players'] = '';
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
if ($players_get) {
|
|
|
|
foreach ($players as $index => $player) {
|
|
|
|
$html->get($server['game'], 'sections/servers/players');
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$html->set('i', $player['i']);
|
|
|
|
$html->set('name', $player['name']);
|
|
|
|
$html->set('score', $player['score']);
|
|
|
|
$html->set('time', $player['time']);
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$html->pack('list');
|
2023-03-05 13:59:34 +00:00
|
|
|
}
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$out['players'] = isset($html->arr['list']) ? $html->arr['list'] : '';
|
|
|
|
}
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$sql->query('UPDATE `servers` set '
|
|
|
|
. '`name`="' . $out['name'] . '", '
|
|
|
|
. '`online`="' . $out['online'] . '", '
|
|
|
|
. '`map`="' . $info['map'] . '", '
|
|
|
|
. '`status`="working" WHERE `id`="' . $id . '" LIMIT 1');
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
if ($players_get)
|
|
|
|
$sql->query('UPDATE `servers` set `players`="' . base64_encode($out['players']) . '" WHERE `id`="' . $id . '" LIMIT 1');
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$mcache->set($nmch, $out, false, $cfg['mcache_server_mon']);
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
return $out;
|
|
|
|
}
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
public static function info($sq, $id, $pl = false)
|
|
|
|
{
|
|
|
|
global $sql;
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$sql->query('SELECT `address` FROM `servers` WHERE `id`="' . $id . '" LIMIT 1');
|
|
|
|
$server = $sql->get();
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
list($ip, $port) = explode(':', $server['address']);
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$sq->Connect($ip, $port, 1, SourceQuery::SOURCE);
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
if ($pl) {
|
|
|
|
$players = $sq->GetPlayers();
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$i = 1;
|
|
|
|
$data = array();
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
foreach ($players as $n => $player) {
|
|
|
|
$data[$i]['i'] = $i;
|
|
|
|
$data[$i]['name'] = $player['Name'] == '' ? 'Подключается' : $player['Name'];
|
|
|
|
$data[$i]['score'] = $player['Frags'];
|
|
|
|
$data[$i]['time'] = $player['TimeF'];
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$i += 1;
|
2023-03-05 13:59:34 +00:00
|
|
|
}
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
return $data;
|
|
|
|
}
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$data = $sq->GetInfo();
|
2023-03-04 23:45:46 +00:00
|
|
|
|
2023-05-05 01:17:19 +00:00
|
|
|
$server['name'] = $data['HostName'];
|
|
|
|
$server['map'] = $data['Map'];
|
|
|
|
$server['online'] = $data['Players'];
|
|
|
|
$server['status'] = strlen($server['map']) > 3 ? true : false;
|
|
|
|
|
|
|
|
return $server;
|
2023-03-05 13:59:34 +00:00
|
|
|
}
|
2023-05-05 01:17:19 +00:00
|
|
|
}
|
|
|
|
|
2023-03-04 23:45:46 +00:00
|
|
|
?>
|