GameQMonitor.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. global $settings;
  3. // Skip server queries if there are too many total servers
  4. if(isset($_SESSION))
  5. $num_of_servers = $db->getNumberOfOwnedServersPerUser( $_SESSION['user_id'] );
  6. else
  7. $num_of_servers = 0;
  8. if(isset($settings['query_num_servers_stop']) && is_numeric($settings['query_num_servers_stop']))
  9. $numberservers_to_skip_query = $settings['query_num_servers_stop'];
  10. else
  11. $numberservers_to_skip_query = 15;
  12. if($num_of_servers < $numberservers_to_skip_query)
  13. {
  14. if ( $server_home['use_nat'] == 1 )
  15. $internal_query_ip = $server_home['agent_ip'];
  16. else
  17. $internal_query_ip = $server_home['ip'];
  18. $query_cache_life = ( isset($settings['query_cache_life']) and is_numeric($settings['query_cache_life']) )? $settings['query_cache_life'] : 30;
  19. $ip_id = $db->getIpIdByIp($server_home['ip']);
  20. $statusCache = $db->getServerStatusCache($ip_id,$port);
  21. if( !empty($statusCache) AND date('YmdHis',$statusCache['date_timestamp'] + $query_cache_life) >= date('YmdHis') )
  22. {
  23. $results = $statusCache;
  24. }
  25. else
  26. {
  27. require_once 'protocol/GameQ/Autoloader.php';
  28. $port = $server_home['port'];
  29. $query_port = get_query_port($server_xml, $port);
  30. $gq = new \GameQ\GameQ();
  31. $server = array(
  32. 'id' => 'server',
  33. 'type' => $server_xml->gameq_query_name,
  34. 'host' => $internal_query_ip . ":" . $query_port,
  35. );
  36. $gq->addServer($server);
  37. $gq->setOption('timeout', 4);
  38. $gq->setOption('debug', FALSE);
  39. $gq->addFilter('normalise');
  40. $results = $gq->process();
  41. $db->saveServerStatusCache($ip_id,$port,$results);
  42. }
  43. if($results['server']['gq_online'] == 1)
  44. {
  45. $status = "online";
  46. // Some functions to print the results
  47. $players = $results['server']['gq_numplayers'];
  48. $playersmax = $results['server']['gq_maxplayers'];
  49. $name = $results['server']['gq_hostname'];
  50. $map = preg_replace("/[^a-z0-9_]/", "_", strtolower(@(string)$results['server']['gq_mapname']));
  51. //----------+ patches for voice servers (ts2, ts3, ventrilo)
  52. if(!$map)$map = $results['server']['gq_type'];
  53. if(!$players)$players = 0;
  54. @$stats_players += $players; // COUNT VISIBLE NUMBER OF PLAYERS
  55. @$stats_maxplayers += $playersmax; // COUNT VISIBLE NUMBER OF SLOTS
  56. if ( $results['server']['gq_numplayers'] > 0 )
  57. $player_list = print_player_list_gameq($results['server']['players'],$players,$playersmax);
  58. if(isset($results['gq_joinlink']) and $results['gq_joinlink'] != "")
  59. $address = "<a href='$results[gq_joinlink]'>$ip:$port</a>";
  60. elseif($server_xml->installer == 'steamcmd')
  61. $address = "<a href='steam://connect/$internal_query_ip:$port'>$ip:$port</a>";
  62. else
  63. $address = "$ip:$port";
  64. $playersList = $results['server']['players'];
  65. $maplocation = get_map_path($query_name,$mod,$map);
  66. }
  67. else
  68. $status = "half";
  69. }
  70. else
  71. {
  72. $status = "half";
  73. $notifications = get_lang_f('queries_disabled_by_setting_disable_queries_after',$numberservers_to_skip_query,$num_of_servers);
  74. }
  75. ?>