diff --git a/application/core/Bills/BillData.php b/application/core/Bills/BillData.php index 2a0d70f2..a1606c7f 100644 --- a/application/core/Bills/BillData.php +++ b/application/core/Bills/BillData.php @@ -1,6 +1,7 @@ maniaControl->client->sendBill($player->login, $amount, $message); - } else { - $bill = $this->maniaControl->client->sendBill($player->login, $amount, $message, $receiver); - } - } catch(Exception $e) { - // TODO: handle errors like 'too few server planets' - throw other like connection errors - $this->maniaControl->errorHandler->triggerDebugNotice("Couldn't create donation of {$amount} planets from '{$player->login}' for '{$receiver}'. " . $e->getMessage()); - return false; + if (!$receiver) { + $bill = $this->maniaControl->client->sendBill($player->login, $amount, $message); + } else { + $bill = $this->maniaControl->client->sendBill($player->login, $amount, $message, $receiver); } $this->openBills[$bill] = new BillData($function, $player, $amount); @@ -89,14 +82,7 @@ class BillManager implements CallbackListener { return false; } - try { - $bill = $this->maniaControl->client->pay($receiverLogin, $amount, $message); - } catch(Exception $e) { - // TODO: handle errors like 'too few server planets' - throw other like connection errors - //trigger_error("Couldn't create payout of {$amount} planets by '{$player->login}' for '{$receiver}'. " . $e->getMessage()); - $this->maniaControl->errorHandler->triggerDebugNotice("Couldn't create payout of {$amount} planets to '{$receiverLogin}' " . $e->getMessage()); - return false; - } + $bill = $this->maniaControl->client->pay($receiverLogin, $amount, $message); $this->openBills[$bill] = new BillData($function, $receiverLogin, $amount, true); diff --git a/application/core/Configurators/ScriptSettings.php b/application/core/Configurators/ScriptSettings.php index 554623c9..11f8626a 100644 --- a/application/core/Configurators/ScriptSettings.php +++ b/application/core/Configurators/ScriptSettings.php @@ -13,28 +13,29 @@ use ManiaControl\Admin\AuthenticationManager; use ManiaControl\Callbacks\CallbackListener; use ManiaControl\Callbacks\CallbackManager; use ManiaControl\ManiaControl; +use ManiaControl\Maps\Map; use ManiaControl\Maps\MapManager; use ManiaControl\Players\Player; use Maniaplanet\DedicatedServer\Xmlrpc\Exception; -use ManiaControl\Maps\Map; +use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException; /** * Class offering a Configurator for Script Settings * - * @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 ScriptSettings implements ConfiguratorMenu, CallbackListener { /* * Constants */ - const ACTION_PREFIX_SETTING = 'ScriptSetting'; - const ACTION_SETTING_BOOL = 'ScriptSetting.ActionBoolSetting.'; - const CB_SCRIPTSETTING_CHANGED = 'ScriptSettings.SettingChanged'; - const CB_SCRIPTSETTINGS_CHANGED = 'ScriptSettings.SettingsChanged'; - const TABLE_SCRIPT_SETTINGS = 'mc_scriptsettings'; - const SETTING_LOAD_DEFAULT_SETTINGS_MAP_BEGIN = 'Load Stored Script-Settings on Map-Begin'; + const ACTION_PREFIX_SETTING = 'ScriptSetting'; + const ACTION_SETTING_BOOL = 'ScriptSetting.ActionBoolSetting.'; + const CB_SCRIPTSETTING_CHANGED = 'ScriptSettings.SettingChanged'; + const CB_SCRIPTSETTINGS_CHANGED = 'ScriptSettings.SettingsChanged'; + const TABLE_SCRIPT_SETTINGS = 'mc_scriptsettings'; + const SETTING_LOAD_DEFAULT_SETTINGS_MAP_BEGIN = 'Load Stored Script-Settings on Map-Begin'; const SETTING_PERMISSION_CHANGE_SCRIPT_SETTINGS = 'Change Script-Settings'; /* @@ -117,11 +118,8 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener { public function loadSettingsFromDatabase() { try { $scriptSettings = $this->maniaControl->client->getModeScriptSettings(); - } catch(Exception $e) { - if ($e->getMessage() == 'Not in script mode.') { - return false; - } - throw $e; + } catch(NotInScriptModeException $e) { + return false; } $mysqli = $this->maniaControl->database->mysqli; @@ -185,7 +183,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener { try { $scriptSettings = $this->maniaControl->client->getModeScriptSettings(); - } catch(Exception $e) { + } catch(NotInScriptModeException $e) { //do nothing } @@ -320,11 +318,8 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener { try { $scriptSettings = $this->maniaControl->client->getModeScriptSettings(); - } catch(Exception $e) { - if ($e->getMessage() == 'Not in script mode.') { - return; - } - throw $e; + } catch(NotInScriptModeException $e) { + return; } $prefixLength = strlen(self::ACTION_PREFIX_SETTING); @@ -389,11 +384,8 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener { public function toggleBooleanSetting($setting, Player $player) { try { $scriptSettings = $this->maniaControl->client->getModeScriptSettings(); - } catch(Exception $e) { - if ($e->getMessage() == 'Not in script mode.') { - return; - } - throw $e; + } catch(NotInScriptModeException $e) { + return; } if (!isset($scriptSettings[$setting])) { @@ -415,11 +407,15 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener { * @param bool */ private function applyNewScriptSettings(array $newSettings, Player $player) { - if (!$newSettings) return true; + if (!$newSettings) { + return true; + } try { $this->maniaControl->client->setModeScriptSettings($newSettings); } catch(Exception $e) { + //TODO temp added 19.04.2014 + $this->maniaControl->errorHandler->triggerDebugNotice("Exception line 416 ScriptSettings.php" . $e->getMessage()); $this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login); return false; } diff --git a/application/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/FaultException.php b/application/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/FaultException.php index 4cb5c633..92a4de2e 100644 --- a/application/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/FaultException.php +++ b/application/core/Libs/Maniaplanet/DedicatedServer/Xmlrpc/FaultException.php @@ -19,6 +19,8 @@ class FaultException extends Exception return new CouldNotWritePlaylistFileException($faultString, $faultCode); case 'Start index out of bound.': return new StartIndexOutOfBoundException($faultString, $faultCode); + case 'Not in script mode.': + return new NotInScriptModeException($faultString, $faultCode); } return new self($faultString, $faultCode); @@ -28,4 +30,5 @@ class FaultException extends Exception class LoginUnknownException extends FaultException {} class CouldNotWritePlaylistFileException extends FaultException {} class StartIndexOutOfBoundException extends FaultException {} +class NotInScriptModeException extends FaultException {} ?> diff --git a/application/core/ManiaControl.php b/application/core/ManiaControl.php index 554226f5..0a30eb85 100644 --- a/application/core/ManiaControl.php +++ b/application/core/ManiaControl.php @@ -25,6 +25,7 @@ use ManiaControl\Update\UpdateManager; use Maniaplanet\DedicatedServer\Connection; use Maniaplanet\DedicatedServer\Transport\TransportException; use Maniaplanet\DedicatedServer\Xmlrpc\Exception; +use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException; require_once __DIR__ . '/Libs/Maniaplanet/DedicatedServer/Connection.php'; require_once __DIR__ . '/Libs/GbxDataFetcher/gbxdatafetcher.inc.php'; @@ -132,10 +133,11 @@ class ManiaControl implements CommandListener, TimerListener { /** * Checks connection every xxx Minutes + * * @param $time */ - public function checkConnection($time){ - if($this->client->getIdleTime() > 180){ + public function checkConnection($time) { + if ($this->client->getIdleTime() > 180) { $this->client->getServerName(); } } @@ -243,7 +245,7 @@ class ManiaControl implements CommandListener, TimerListener { $this->client->sendHideManialinkPage(); // Close the client connection $this->client->delete($this->server->ip, $this->server->port); - } catch(FatalException $e) { + } catch(TransportException $e) { $this->errorHandler->triggerDebugNotice($e->getMessage() . " File: " . $e->getFile() . " Line: " . $e->getLine()); } } @@ -399,7 +401,7 @@ class ManiaControl implements CommandListener, TimerListener { if (!$this->server->waitForStatus(4)) { trigger_error("Server couldn't get ready!", E_USER_ERROR); } - } catch(FatalException $e) { + } catch(Exception $e) { // TODO remove if ($this->errorHandler) { $this->errorHandler->triggerDebugNotice("Fatal Exception: " . $e->getMessage() . " Trace: " . $e->getTraceAsString()); @@ -420,11 +422,8 @@ class ManiaControl implements CommandListener, TimerListener { try { $scriptSettings = $this->client->getModeScriptSettings(); - } catch(Exception $e) { - if ($e->getMessage() == 'Not in script mode.') { - return; - } - throw $e; + } catch(NotInScriptModeException $e) { + return; } if (!array_key_exists('S_UseScriptCallbacks', $scriptSettings)) { @@ -435,6 +434,9 @@ class ManiaControl implements CommandListener, TimerListener { try { $this->client->setModeScriptSettings($scriptSettings); } catch(Exception $e) { + //TODO temp added 19.04.2014 + $this->maniaControl->errorHandler->triggerDebugNotice("Exception line 437 ManiaControl.php " . $e->getMessage()); + trigger_error("Couldn't set mode script settings to enable script callbacks. " . $e->getMessage()); return; } diff --git a/application/core/Server/Server.php b/application/core/Server/Server.php index 73706e23..9b462794 100644 --- a/application/core/Server/Server.php +++ b/application/core/Server/Server.php @@ -10,17 +10,17 @@ use Maniaplanet\DedicatedServer\Xmlrpc\Exception; /** * 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 */ @@ -35,7 +35,7 @@ class Server implements CallbackListener { public $serverCommands = null; public $usageReporter = null; public $rankingManager = null; - + /* * Private Properties */ @@ -50,11 +50,11 @@ class Server implements CallbackListener { 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'); } @@ -63,52 +63,67 @@ 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); - + if (!$this->maniaControl->config) { + trigger_error('Error loading Server Config!', E_USER_ERROR); + } + // Config id $id = null; global $argv; - foreach ($argv as $arg) { + foreach($argv as $arg) { $parts = explode('=', $arg); - if (count($parts) < 2) continue; - if ($parts[0] != '-id') continue; + if (count($parts) < 2) + continue; + if ($parts[0] != '-id') + continue; $id = $parts[1]; break; } - + // Xml server tag with given id $serverTag = null; if ($id) { $serverTags = $this->maniaControl->config->xpath("server[@id='{$id}']"); - if ($serverTags) $serverTag = $serverTags[0]; - if (!$serverTag) trigger_error("No Server configured with the ID '{$id}'!", E_USER_ERROR); - } - else { + 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 ($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) trigger_error("Invalid server configuration (host).", E_USER_ERROR); - + 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) trigger_error("Invalid server configuration (port).", E_USER_ERROR); - + 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) trigger_error("Invalid server configuration (login).", E_USER_ERROR); - + if ($login) + $login = (string)$login[0]; + if (!$login) + trigger_error("Invalid server configuration (login).", E_USER_ERROR); + // Pass $pass = $serverTag->xpath('pass'); - if ($pass) $pass = (string) $pass[0]; - if (!$pass) trigger_error("Invalid server configuration (password).", E_USER_ERROR); - + 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); } @@ -118,16 +133,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 ( ? @@ -155,8 +170,8 @@ class Server implements CallbackListener { * @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`), @@ -183,19 +198,19 @@ class Server implements CallbackListener { */ 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; } @@ -212,9 +227,9 @@ class Server implements CallbackListener { * @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); @@ -281,18 +296,17 @@ 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: @@ -323,8 +337,10 @@ class Server implements CallbackListener { public function getValidationReplay($login) { try { $replay = $this->maniaControl->client->getValidationReplay($login); - } - catch (Exception $e) { + } 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; } @@ -342,22 +358,24 @@ 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) { + } 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) { @@ -380,12 +398,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) {