Unsupported PHP app for analysing and displaying stats for Team Fortress 2
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

daemon.php 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #!/usr/bin/php -q
  2. <?PHP
  3. require_once(dirname(__FILE__) . '/config.php');
  4. require_once(dirname(__FILE__) . '/inc/database.php');
  5. require_once(dirname(__FILE__) . '/inc/daemon.class.php');
  6. require_once(dirname(__FILE__) . '/inc/parser/parser.php');
  7. define('SCRIPT_HEAD1', 'daemon.php v0.1');
  8. define('SCRIPT_HEAD3', 'Analyses server stats in real time ');
  9. require(dirname(__FILE__) . '/inc/cliheader.php');
  10. $port = false;
  11. $server = false;
  12. $force = false;
  13. foreach ($argv as $arg) {
  14. if ($arg == '--port') {
  15. $port = true;
  16. } else if ($port === true) {
  17. $port = (int) $arg;
  18. } if ($arg == '--server') {
  19. $server = true;
  20. } else if ($server === true) {
  21. $server = (int) $arg;
  22. } else if ($arg == '--force') {
  23. $force = true;
  24. }
  25. }
  26. if ($port === true || $port === false) {
  27. die('ERROR: Please specify a port with --port <port>' . "\n");
  28. } else if ($server === false) {
  29. $server = 1;
  30. } else if ($server === true) {
  31. die('ERROR: Please specify a valid server with --server <id>'. "\n");
  32. }
  33. $sql = 'SELECT server_ip, server_port, server_rcon, server_daemon FROM servers WHERE server_id = ' . $server;
  34. $res = mysql_query($sql);
  35. if (mysql_num_rows($res) == 0) {
  36. die('ERROR: Invalid server. Please specify a valid one with --server <id>' . "\n");
  37. } else {
  38. $row = mysql_fetch_assoc($res);
  39. if ($row['server_rcon'] === null || empty($row['server_rcon'])) {
  40. die('ERROR: No rcon password specified for that server.' . "\n");
  41. } else {
  42. define('SERVER_IP', $row['server_ip']);
  43. define('SERVER_PORT', (int) $row['server_port']);
  44. define('RCON_PW', $row['server_rcon']);
  45. }
  46. if ((int) $row['server_daemon'] == 0) {
  47. if ($force) {
  48. echo "Setting server to daemon mode...\n";
  49. $sql = 'UPDATE servers SET server_daemon = 1 WHERE server_id = ' . $server;
  50. mysql_query($sql);
  51. } else {
  52. echo str_pad(' WARNING ', 80, '@', STR_PAD_BOTH), "\n";
  53. echo "@ @\n";
  54. echo "@ That server is currently set to log parsing mode. If you switch to daemon @\n";
  55. echo "@ mode you will no longer be able to use the 'bulk import' facility, and may @\n";
  56. echo "@ lose data if the daemon script is not running constantly. @\n";
  57. echo "@ @\n";
  58. echo "@ If you're sure you want to start the daemon for this server, add the @\n";
  59. echo "@ --force parameter to the arguments for this script and rerun it. @\n";
  60. echo "@ @\n";
  61. echo str_repeat('@', 80), "\n";
  62. exit();
  63. }
  64. }
  65. }
  66. if (($socket = @socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) === false) {
  67. die('ERROR: Unable to create socket. Error: ' . socket_strerror(socket_last_error()) . "\n");
  68. }
  69. if (!@socket_bind($socket, '0.0.0.0', $port)) {
  70. die('ERROR: Unable to bind socket. Error: ' . socket_strerror(socket_last_error()) . "\n");
  71. }
  72. socket_set_block($socket);
  73. Parser::setDaemon(new Daemon(SERVER_IP, SERVER_PORT, RCON_PW));
  74. while (true) {
  75. $buf = $from = '';
  76. if (socket_recvfrom($socket, $buf, 1024, 0, $from, $port) > -1) {
  77. echo $buf;
  78. Parser::parseLine($buf);
  79. }
  80. }
  81. ?>