scan.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. if (!DEFINED('EGP'))
  3. exit(header('Refresh: 0; URL=http://' . $_SERVER['SERVER_NAME'] . '/404'));
  4. include(LIB . 'games/scans.php');
  5. use xPaw\SourceQuery\SourceQuery;
  6. class scan extends scans
  7. {
  8. public static function mon($id, $players_get = false)
  9. {
  10. global $cfg, $sql, $html, $mcache;
  11. $sq = new SourceQuery();
  12. if ($players_get)
  13. $nmch = 'server_scan_mon_pl_' . $id;
  14. else
  15. $nmch = 'server_scan_mon_' . $id;
  16. if (is_array($mcache->get($nmch)))
  17. return $mcache->get($nmch);
  18. $out = array();
  19. $info = scan::info($sq, $id);
  20. $sql->query('SELECT `game`, `name`, `map`, `online`, `players`, `status`, `time`, `overdue` FROM `servers` WHERE `id`="' . $id . '" LIMIT 1');
  21. $server = $sql->get();
  22. $out['time'] = 'Арендован до: ' . date('d.m.Y - H:i', $server['time']);
  23. if ($server['status'] == 'overdue')
  24. $out['time_end'] = 'Удаление через: ' . sys::date('min', $server['overdue'] + $cfg['server_delete'] * 86400);
  25. else
  26. $out['time_end'] = 'Осталось: ' . sys::date('min', $server['time']);
  27. if (!$info['status']) {
  28. $out['name'] = $server['name'];
  29. $out['status'] = sys::status($server['status'], $server['game'], $server['map']);
  30. $out['online'] = $server['online'];
  31. $out['image'] = '<img src="' . sys::status($server['status'], $server['game'], $server['map'], 'img') . '">';
  32. $out['buttons'] = sys::buttons($id, $server['status']);
  33. if ($players_get)
  34. $out['players'] = base64_decode($server['players']);
  35. $mcache->set($nmch, $out, false, $cfg['mcache_server_mon']);
  36. return $out;
  37. }
  38. if ($players_get)
  39. $players = scan::info($sq, $id, true);
  40. $out['name'] = htmlspecialchars($info['name']);
  41. $out['status'] = sys::status('working', $server['game'], $info['map']);
  42. $out['online'] = $info['online'];
  43. $out['image'] = '<img src="' . sys::status('working', $server['game'], $info['map'], 'img') . '">';
  44. $out['buttons'] = sys::buttons($id, 'working');
  45. $out['players'] = '';
  46. if ($players_get) {
  47. foreach ($players as $index => $player) {
  48. $html->get($server['game'], 'sections/servers/players');
  49. $html->set('i', $player['i']);
  50. $html->set('name', $player['name']);
  51. $html->set('score', $player['score']);
  52. $html->set('time', $player['time']);
  53. $html->pack('list');
  54. }
  55. $out['players'] = isset($html->arr['list']) ? $html->arr['list'] : '';
  56. }
  57. $sql->query('UPDATE `servers` set '
  58. . '`name`="' . $out['name'] . '", '
  59. . '`online`="' . $out['online'] . '", '
  60. . '`map`="' . $info['map'] . '", '
  61. . '`status`="working" WHERE `id`="' . $id . '" LIMIT 1');
  62. if ($players_get)
  63. $sql->query('UPDATE `servers` set `players`="' . base64_encode($out['players']) . '" WHERE `id`="' . $id . '" LIMIT 1');
  64. $mcache->set($nmch, $out, false, $cfg['mcache_server_mon']);
  65. return $out;
  66. }
  67. public static function info($sq, $id, $pl = false)
  68. {
  69. global $sql;
  70. $sql->query('SELECT `address` FROM `servers` WHERE `id`="' . $id . '" LIMIT 1');
  71. $server = $sql->get();
  72. list($ip, $port) = explode(':', $server['address']);
  73. $sq->Connect($ip, $port, 1, SourceQuery::SOURCE);
  74. if ($pl) {
  75. $players = $sq->GetPlayers();
  76. $i = 1;
  77. $data = array();
  78. foreach ($players as $n => $player) {
  79. $data[$i]['i'] = $i;
  80. $data[$i]['name'] = $player['Name'] == '' ? 'Подключается' : $player['Name'];
  81. $data[$i]['score'] = $player['Frags'];
  82. $data[$i]['time'] = $player['TimeF'];
  83. $i += 1;
  84. }
  85. return $data;
  86. }
  87. $data = $sq->GetInfo();
  88. $map = explode('/', $data['Map'] ?? '');
  89. $server['name'] = $data['HostName'];
  90. $server['map'] = end($map);
  91. $server['online'] = $data['Players'];
  92. $server['status'] = strlen($server['map']) > 3 ? true : false;
  93. return $server;
  94. }
  95. }
  96. ?>