diff --git a/application/core/Server/Server.php b/application/core/Server/Server.php index ca1f82cf..787d47a3 100644 --- a/application/core/Server/Server.php +++ b/application/core/Server/Server.php @@ -6,25 +6,29 @@ use ManiaControl\Callbacks\CallbackListener; use ManiaControl\Callbacks\CallbackManager; use ManiaControl\ManiaControl; use Maniaplanet\DedicatedServer\Xmlrpc\Exception; +use ManiaControl\CommandLineHelper; /** * Class providing Access to the connected ManiaPlanet Server - * - * @author steeffeen & kremsy + * + * @author steeffeen & kremsy * @copyright ManiaControl Copyright © 2014 ManiaControl Team - * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 + * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 */ class Server implements CallbackListener { /* * Constants */ - const TABLE_SERVERS = 'mc_servers'; + const TABLE_SERVERS = 'mc_servers'; const CB_TEAM_MODE_CHANGED = 'ServerCallback.TeamModeChanged'; - + /* * Public Properties */ - /** @var Config $config */ + /** + * + * @var Config $config + */ public $config = null; public $index = -1; public $ip = null; @@ -36,7 +40,7 @@ class Server implements CallbackListener { public $serverCommands = null; public $usageReporter = null; public $rankingManager = null; - + /* * Private Properties */ @@ -45,17 +49,17 @@ class Server implements CallbackListener { /** * Construct a new Server - * + * * @param ManiaControl $maniaControl */ public function __construct(ManiaControl $maniaControl) { $this->maniaControl = $maniaControl; $this->initTables(); - + $this->serverCommands = new ServerCommands($maniaControl); - $this->usageReporter = new UsageReporter($maniaControl); + $this->usageReporter = new UsageReporter($maniaControl); $this->rankingManager = new RankingManager($maniaControl); - + // Register for callbacks $this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_ONINIT, $this, 'onInit'); } @@ -64,69 +68,68 @@ class Server implements CallbackListener { * Load the Server Configuration from the Config XML */ public function loadConfig() { - if (!$this->maniaControl->config) { - trigger_error('Error loading Server Config!', E_USER_ERROR); - } - - // Config id - $id = null; - global $argv; - foreach($argv as $arg) { - $parts = explode('=', $arg); - if (count($parts) < 2) - continue; - if ($parts[0] != '-id') - continue; - $id = $parts[1]; - break; - } - + // Server id parameter + $serverId = CommandLineHelper::getParameter('-id'); + // Xml server tag with given id $serverTag = null; - if ($id) { - $serverTags = $this->maniaControl->config->xpath("server[@id='{$id}']"); - if ($serverTags) + if ($serverId) { + $serverTags = $this->maniaControl->config->xpath("server[@id='{$serverId}']"); + if ($serverTags) { $serverTag = $serverTags[0]; - if (!$serverTag) - trigger_error("No Server configured with the ID '{$id}'!", E_USER_ERROR); - } else { - $serverTags = $this->maniaControl->config->xpath('server'); - if ($serverTags) - $serverTag = $serverTags[0]; - if (!$serverTag) - trigger_error('No Server configured!', E_USER_ERROR); + } + if (!$serverTag) { + trigger_error("No Server configured with the ID '{$serverId}'!", E_USER_ERROR); + } } - + else { + $serverTags = $this->maniaControl->config->xpath('server'); + if ($serverTags) { + $serverTag = $serverTags[0]; + } + if (!$serverTag) { + trigger_error('No Server configured!', E_USER_ERROR); + } + } + // Host $host = $serverTag->xpath('host'); - if ($host) - $host = (string)$host[0]; - if (!$host) + if ($host) { + $host = (string) $host[0]; + } + if (!$host) { trigger_error("Invalid server configuration (host).", E_USER_ERROR); - + } + // Port $port = $serverTag->xpath('port'); - if ($port) - $port = (string)$port[0]; - if (!$port) + if ($port) { + $port = (string) $port[0]; + } + if (!$port) { trigger_error("Invalid server configuration (port).", E_USER_ERROR); - + } + // Login $login = $serverTag->xpath('login'); - if ($login) - $login = (string)$login[0]; - if (!$login) + if ($login) { + $login = (string) $login[0]; + } + if (!$login) { trigger_error("Invalid server configuration (login).", E_USER_ERROR); - - // Pass + } + + // Password $pass = $serverTag->xpath('pass'); - if ($pass) - $pass = (string)$pass[0]; - if (!$pass) + if ($pass) { + $pass = (string) $pass[0]; + } + if (!$pass) { trigger_error("Invalid server configuration (password).", E_USER_ERROR); - + } + // Create config object - $this->config = new Config($id, $host, $port, $login, $pass); + $this->config = new Config($serverId, $host, $port, $login, $pass); } /** @@ -134,16 +137,16 @@ class Server implements CallbackListener { */ private function updateProperties() { // System info - $systemInfo = $this->maniaControl->client->getSystemInfo(); - $this->ip = $systemInfo->publishedIp; - $this->port = $systemInfo->port; + $systemInfo = $this->maniaControl->client->getSystemInfo(); + $this->ip = $systemInfo->publishedIp; + $this->port = $systemInfo->port; $this->p2pPort = $systemInfo->p2PPort; - $this->login = $systemInfo->serverLogin; + $this->login = $systemInfo->serverLogin; $this->titleId = $systemInfo->titleId; - + // Database index - $mysqli = $this->maniaControl->database->mysqli; - $query = "INSERT INTO `" . self::TABLE_SERVERS . "` ( + $mysqli = $this->maniaControl->database->mysqli; + $query = "INSERT INTO `" . self::TABLE_SERVERS . "` ( `login` ) VALUES ( ? @@ -167,12 +170,12 @@ class Server implements CallbackListener { /** * Initialize necessary Database Tables - * + * * @return bool */ private function initTables() { - $mysqli = $this->maniaControl->database->mysqli; - $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_SERVERS . "` ( + $mysqli = $this->maniaControl->database->mysqli; + $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_SERVERS . "` ( `index` int(11) NOT NULL AUTO_INCREMENT, `login` varchar(100) NOT NULL, PRIMARY KEY (`index`), @@ -194,24 +197,24 @@ class Server implements CallbackListener { /** * Gets all Servers from the Database - * + * * @return array */ public function getAllServers() { $mysqli = $this->maniaControl->database->mysqli; - $query = "SELECT * FROM `" . self::TABLE_SERVERS . "`"; + $query = "SELECT * FROM `" . self::TABLE_SERVERS . "`"; $result = $mysqli->query($query); if (!$result) { trigger_error($mysqli->error); return array(); } - + $servers = array(); - while($row = $result->fetch_object()) { + while ($row = $result->fetch_object()) { array_push($servers, $row); } $result->close(); - + return $servers; } @@ -224,13 +227,13 @@ class Server implements CallbackListener { /** * Set if the Server Runs a Team-Mode or not - * + * * @param bool $teamMode */ public function setTeamMode($teamMode = true) { - $oldStatus = $this->teamMode; + $oldStatus = $this->teamMode; $this->teamMode = $teamMode; - + // Trigger callback if ($oldStatus != $this->teamMode) { $this->maniaControl->callbackManager->triggerCallback(self::CB_TEAM_MODE_CHANGED, $teamMode); @@ -239,7 +242,7 @@ class Server implements CallbackListener { /** * Check if the Server Runs a TeamMode - * + * * @return bool */ public function isTeamMode() { @@ -248,7 +251,7 @@ class Server implements CallbackListener { /** * Fetch Game Data Directory - * + * * @return string */ public function getDataDirectory() { @@ -260,7 +263,7 @@ class Server implements CallbackListener { /** * Fetch Maps Directory - * + * * @return string */ public function getMapsDirectory() { @@ -273,7 +276,7 @@ class Server implements CallbackListener { /** * Checks if ManiaControl has Access to the given Directory - * + * * @param string $directory * @return bool */ @@ -286,7 +289,7 @@ class Server implements CallbackListener { /** * Get Server Player Info - * + * * @return \Maniaplanet\DedicatedServer\Structures\Player */ public function getInfo() { @@ -295,19 +298,20 @@ class Server implements CallbackListener { /** * Fetch current Game Mode - * + * * @param bool $stringValue - * @param int $parseValue + * @param int $parseValue * @return int | string */ public function getGameMode($stringValue = false, $parseValue = null) { if (is_int($parseValue)) { $gameMode = $parseValue; - } else { + } + else { $gameMode = $this->maniaControl->client->getGameMode(); } if ($stringValue) { - switch($gameMode) { + switch ($gameMode) { case 0: return 'Script'; case 1: @@ -331,17 +335,18 @@ class Server implements CallbackListener { /** * Retrieve Validation Replay for the given Player - * + * * @param $login * @return string */ public function getValidationReplay($login) { try { $replay = $this->maniaControl->client->getValidationReplay($login); - } catch(Exception $e) { - //TODO temp added 19.04.2014 + } + catch (Exception $e) { + // TODO temp added 19.04.2014 $this->maniaControl->errorHandler->triggerDebugNotice("Exception line 330 Server.php" . $e->getMessage()); - + trigger_error("Couldn't get validation replay of '{$login}'. " . $e->getMessage()); return null; } @@ -350,7 +355,7 @@ class Server implements CallbackListener { /** * Retrieve Ghost Replay for the given Player - * + * * @param $login * @return string */ @@ -359,24 +364,25 @@ class Server implements CallbackListener { if (!$this->checkAccess($dataDir)) { return null; } - + // Build file name - $map = $this->maniaControl->mapManager->getCurrentMap(); + $map = $this->maniaControl->mapManager->getCurrentMap(); $gameMode = $this->getGameMode(); - $time = time(); + $time = time(); $fileName = "GhostReplays/Ghost.{$login}.{$gameMode}.{$time}.{$map->uid}.Replay.Gbx"; - + // Save ghost replay try { $this->maniaControl->client->saveBestGhostsReplay($login, $fileName); - } catch(Exception $e) { - //TODO temp added 19.04.2014 + } + catch (Exception $e) { + // TODO temp added 19.04.2014 $this->maniaControl->errorHandler->triggerDebugNotice("Exception line 360 Server.php" . $e->getMessage()); - + trigger_error("Couldn't save ghost replay. " . $e->getMessage()); return null; } - + // Load replay file $ghostReplay = file_get_contents("{$dataDir}Replays/{$fileName}"); if (!$ghostReplay) { @@ -388,7 +394,7 @@ class Server implements CallbackListener { /** * Wait for the Server to have the given Status - * + * * @param int $statusCode * @return bool */ @@ -399,12 +405,12 @@ class Server implements CallbackListener { return true; } // Server not yet in given status - Wait for it... - $waitBegin = time(); + $waitBegin = time(); $maxWaitTime = 50; - $lastStatus = $response->name; + $lastStatus = $response->name; $this->maniaControl->log("Waiting for server to reach status {$statusCode}..."); $this->maniaControl->log("Current Status: {$lastStatus}"); - while($response->code !== 4) { + while ($response->code !== 4) { sleep(1); $response = $this->maniaControl->client->getStatus(); if ($lastStatus !== $response->name) {