scan.php 4.5 KB

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