TS3Monitor.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. if(isset($server_home['control_password']) && $server_home['control_password'] != "")
  3. {
  4. // Skip server queries if there are too many total servers
  5. global $settings;
  6. if(isset($_SESSION))
  7. $num_of_servers = $db->getNumberOfOwnedServersPerUser( $_SESSION['user_id'] );
  8. else
  9. $num_of_servers = 0;
  10. if(isset($settings['query_num_servers_stop']) && is_numeric($settings['query_num_servers_stop'])){
  11. $numberservers_to_skip_query = $settings['query_num_servers_stop'];
  12. }else{
  13. $numberservers_to_skip_query = 15;
  14. }
  15. if($num_of_servers < $numberservers_to_skip_query)
  16. {
  17. $query_cache_life = isset($settings['query_cache_life']) ? $settings['query_cache_life'] : 30;
  18. $ip_id = $db->getIpIdByIp($server_home['ip']);
  19. $port = $server_home['port'];
  20. $statusCache = $db->getServerStatusCache($ip_id,$port);
  21. if( !empty($statusCache) AND date('YmdHis',$statusCache['date_timestamp'] + $query_cache_life) >= date('YmdHis') )
  22. {
  23. $ts3 = $statusCache;
  24. if($ts3['status'] == "half")
  25. $status = "half";
  26. }
  27. else
  28. {
  29. require_once("protocol/TeamSpeak3/TeamSpeak3.php");
  30. $cfg["user"] = "serveradmin";
  31. $cfg["pass"] = $server_home['control_password'];
  32. $cfg["voice"] = $server_home['port'];
  33. $cfg["query"] = 10011;
  34. require_once('includes/lib_remote.php');
  35. $remote = new OGPRemoteLibrary($server_home['agent_ip'], $server_home['agent_port'], $server_home['encryption_key'], $server_home['timeout']);
  36. foreach($db->getHomeIpPorts($server_home['home_id']) as $ts3Port)
  37. {
  38. if($remote->rfile_exists( "startups/".$ts3Port['ip']."-".$ts3Port['port'] ) === 1)
  39. $cfg["query"] = $ts3Port['port'] + 24;
  40. }
  41. if ( $server_home['use_nat'] == 1 )
  42. $cfg["host"] = $server_home['agent_ip'];
  43. else
  44. $cfg["host"] = $server_home['ip'];
  45. $internal_query_ip = $cfg["host"];
  46. $port = $cfg["voice"];
  47. $status = "online";
  48. try
  49. {
  50. $ts3_ServerInstance = TeamSpeak3::factory("serverquery://" . $cfg["user"] . ":" . $cfg["pass"] . "@" . $cfg["host"] . ":" . $cfg["query"] . "/?server_port=" . $cfg["voice"] . "#no_query_clients");
  51. }
  52. catch(TeamSpeak3_Exception $e)
  53. {
  54. $status = "half";
  55. }
  56. $ts3['status'] = $status;
  57. if($status != "half")
  58. {
  59. try
  60. {
  61. $viewer = $ts3_ServerInstance->getViewer(new TeamSpeak3_Viewer_Html("images/viewer/", "images/flags/", "data:image"));
  62. }
  63. catch(TeamSpeak3_Exception $e)
  64. {
  65. $viewer = "Error code:" . $e->getCode() . " [ " . $e->getMessage() . " ]";
  66. }
  67. $ts3['player_list'] = '<div style="width: 100%; height: 100%; overflow: scroll; border: 1px dashed black">' . $viewer . '</div>';
  68. $ts3['maplocation'] = "protocol/lgsl/maps/ts3/teamspeak3.png";
  69. $ts3['address'] = "<a href='ts3server://" . $cfg["host"] . ":" . $cfg["voice"] . "'>" . $cfg["host"] . ":" . $cfg["voice"] . "</a>";
  70. $ts3['name'] = addslashes($ts3_ServerInstance["virtualserver_name"]);
  71. $ts3['map'] = "teamspeak3";
  72. $ts3['playersmax'] = $ts3_ServerInstance["virtualserver_maxclients"];
  73. $ts3['ip'] = $cfg["host"];
  74. $ts3['port'] = $cfg["voice"];
  75. $clients = $ts3_ServerInstance->clientList();
  76. $ts3['players'] = count($clients);
  77. if( $ts3['players'] >= 1 )
  78. {
  79. $i=0;
  80. foreach($clients as $key => $value)
  81. {
  82. /* $playerarray[$i]= */
  83. $ts3['playersList'][$i]['name'] = trim($value);
  84. $i++;
  85. }
  86. }
  87. }
  88. $db->saveServerStatusCache($ip_id,$port,$ts3);
  89. }
  90. if ( $ts3['status'] == "online" )
  91. {
  92. $port = $ts3['port'];
  93. $player_list = $ts3['player_list'];
  94. $maplocation = $ts3['maplocation'];
  95. $address = $ts3['address'];
  96. $name = $ts3['name'];
  97. $map = $ts3['map'];
  98. $players = $ts3['players'];
  99. $playersmax = $ts3['playersmax'];
  100. $stats_players += $ts3['players']; // COUNT VISIBLE NUMBER OF PLAYERS
  101. $stats_maxplayers += $ts3['playersmax']; // COUNT VISIBLE NUMBER OF SLOTS
  102. if( $players >= 1 )
  103. $playersList = $ts3['playersList'];
  104. $status = "online";
  105. }
  106. }
  107. else
  108. {
  109. $status = "half";
  110. $notifications = get_lang_f('queries_disabled_by_setting_disable_queries_after',$numberservers_to_skip_query,$num_of_servers);
  111. }
  112. }
  113. else
  114. $status = "half";
  115. ?>