server properties
This commit is contained in:
		| @@ -308,8 +308,7 @@ class PlayerManager implements CallbackListener { | ||||
| 		$playerStatement->close(); | ||||
|  | ||||
| 		// Increment the Player Join Count | ||||
| 		$serverIndex = $this->maniaControl->server->getIndex(); | ||||
| 		$this->maniaControl->statisticManager->incrementStat(self::STAT_JOIN_COUNT, $player, $serverIndex); | ||||
| 		$this->maniaControl->statisticManager->incrementStat(self::STAT_JOIN_COUNT, $player, $this->maniaControl->server->index); | ||||
|  | ||||
| 		return true; | ||||
| 	} | ||||
|   | ||||
| @@ -22,16 +22,24 @@ class Server implements CallbackListener { | ||||
| 	 */ | ||||
| 	const TABLE_SERVERS = 'mc_servers'; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Public Properties | ||||
| 	 */ | ||||
| 	public $index = -1; | ||||
| 	public $ip = null; | ||||
| 	public $port = -1; | ||||
| 	public $p2pPort = -1; | ||||
| 	public $login = null; | ||||
| 	public $titleId = null; | ||||
| 	public $serverCommands = null; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Private Properties | ||||
| 	 */ | ||||
| 	private $maniaControl = null; | ||||
| 	private $serverCommands = null; | ||||
| 	private $index = null; | ||||
| 	private $login = null; | ||||
|  | ||||
| 	/** | ||||
| 	 * Construct server | ||||
| 	 * Construct a new Server | ||||
| 	 * | ||||
| 	 * @param ManiaControl $maniaControl | ||||
| 	 */ | ||||
| @@ -39,10 +47,46 @@ class Server implements CallbackListener { | ||||
| 		$this->maniaControl = $maniaControl; | ||||
| 		$this->initTables(); | ||||
| 		 | ||||
| 		$this->serverCommands = new ServerCommands($maniaControl); | ||||
| 		 | ||||
| 		// Register for callbacks | ||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MC_ONINIT, $this, 'onInit'); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Refetch the Server Properties | ||||
| 	 */ | ||||
| 	private function updateProperties() { | ||||
| 		// System info | ||||
| 		$systemInfo = $this->getSystemInfo(); | ||||
| 		$this->ip = $systemInfo['PublishedIp']; | ||||
| 		$this->port = $systemInfo['Port']; | ||||
| 		$this->p2pPort = $systemInfo['P2PPort']; | ||||
| 		$this->login = $systemInfo['ServerLogin']; | ||||
| 		$this->titleId = $systemInfo['TitleId']; | ||||
| 		 | ||||
| 		$this->serverCommands = new ServerCommands($maniaControl); | ||||
| 		// Database index | ||||
| 		$mysqli = $this->maniaControl->database->mysqli; | ||||
| 		$query = "INSERT INTO `" . self::TABLE_SERVERS . "` ( | ||||
| 				`login` | ||||
| 				) VALUES ( | ||||
| 				? | ||||
| 				) ON DUPLICATE KEY UPDATE | ||||
| 				`index` = LAST_INSERT_ID(`index`);"; | ||||
| 		$statement = $mysqli->prepare($query); | ||||
| 		if ($mysqli->error) { | ||||
| 			trigger_error($mysqli->error); | ||||
| 			return; | ||||
| 		} | ||||
| 		$statement->bind_param('s', $this->login); | ||||
| 		$statement->execute(); | ||||
| 		if ($statement->error) { | ||||
| 			trigger_error($statement->error); | ||||
| 			$statement->close(); | ||||
| 			return; | ||||
| 		} | ||||
| 		$this->index = $statement->insert_id; | ||||
| 		$statement->close(); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| @@ -78,27 +122,7 @@ class Server implements CallbackListener { | ||||
| 	 * @param array $callback | ||||
| 	 */ | ||||
| 	public function onInit(array $callback) { | ||||
| 		$mysqli = $this->maniaControl->database->mysqli; | ||||
| 		$query = "INSERT IGNORE INTO `" . self::TABLE_SERVERS . "` ( | ||||
| 				`login` | ||||
| 				) VALUES ( | ||||
| 				? | ||||
| 				);"; | ||||
| 		$statement = $mysqli->prepare($query); | ||||
| 		if ($mysqli->error) { | ||||
| 			trigger_error($mysqli->error); | ||||
| 			return; | ||||
| 		} | ||||
| 		$login = $this->getLogin(); | ||||
| 		$statement->bind_param('s', $login); | ||||
| 		$statement->execute(); | ||||
| 		if ($statement->error) { | ||||
| 			trigger_error($statement->error); | ||||
| 			$statement->close(); | ||||
| 			return; | ||||
| 		} | ||||
| 		$statement->close(); | ||||
| 		return true; | ||||
| 		$this->updateProperties(); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| @@ -121,10 +145,8 @@ class Server implements CallbackListener { | ||||
| 	 */ | ||||
| 	public function getMapsDirectory() { | ||||
| 		$dataDirectory = $this->getDataDirectory(); | ||||
| 		if (!$dataDirectory) { | ||||
| 			return null; | ||||
| 		} | ||||
| 		return $dataDirectory . 'Maps/'; | ||||
| 		if (!$dataDirectory) return null; | ||||
| 		return "{$dataDirectory}Maps/"; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| @@ -138,41 +160,6 @@ class Server implements CallbackListener { | ||||
| 		return (is_dir($directory) && is_writable($directory)); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Fetch Server Index | ||||
| 	 * | ||||
| 	 * @return int | ||||
| 	 */ | ||||
| 	public function getIndex() { | ||||
| 		if ($this->index) return $this->index; | ||||
| 		$mysqli = $this->maniaControl->database->mysqli; | ||||
| 		$login = $this->getLogin(); | ||||
| 		$query = "SELECT `index` FROM `" . self::TABLE_SERVERS . "` | ||||
| 				WHERE `login` = '" . $login . "';"; | ||||
| 		$result = $mysqli->query($query); | ||||
| 		if (!$result) { | ||||
| 			trigger_error($mysqli->error); | ||||
| 			return; | ||||
| 		} | ||||
| 		$row = $result->fetch_object(); | ||||
| 		$result->close(); | ||||
| 		$this->index = $row->index; | ||||
| 		return $this->index; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Fetch Server Login | ||||
| 	 * | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	public function getLogin() { | ||||
| 		if ($this->login) return $this->login; | ||||
| 		$systemInfo = $this->getSystemInfo(); | ||||
| 		if (!$systemInfo) return null; | ||||
| 		$this->login = $systemInfo['ServerLogin']; | ||||
| 		return $this->login; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the Server Info | ||||
| 	 * | ||||
| @@ -241,7 +228,7 @@ class Server implements CallbackListener { | ||||
| 	 */ | ||||
| 	public function getSystemInfo() { | ||||
| 		if (!$this->maniaControl->client->query('GetSystemInfo')) { | ||||
| 			trigger_error("Couldn't fetch server system info. " . $this->maniaControl->getClientErrorText($this->maniaControl->client)); | ||||
| 			trigger_error("Couldn't fetch server system info. " . $this->maniaControl->getClientErrorText()); | ||||
| 			return null; | ||||
| 		} | ||||
| 		return $this->maniaControl->client->getResponse(); | ||||
| @@ -268,37 +255,21 @@ class Server implements CallbackListener { | ||||
| 		if ($stringValue) { | ||||
| 			switch ($gameMode) { | ||||
| 				case 0: | ||||
| 					{ | ||||
| 						return 'Script'; | ||||
| 					} | ||||
| 					return 'Script'; | ||||
| 				case 1: | ||||
| 					{ | ||||
| 						return 'Rounds'; | ||||
| 					} | ||||
| 					return 'Rounds'; | ||||
| 				case 2: | ||||
| 					{ | ||||
| 						return 'TimeAttack'; | ||||
| 					} | ||||
| 					return 'TimeAttack'; | ||||
| 				case 3: | ||||
| 					{ | ||||
| 						return 'Team'; | ||||
| 					} | ||||
| 					return 'Team'; | ||||
| 				case 4: | ||||
| 					{ | ||||
| 						return 'Laps'; | ||||
| 					} | ||||
| 					return 'Laps'; | ||||
| 				case 5: | ||||
| 					{ | ||||
| 						return 'Cup'; | ||||
| 					} | ||||
| 					return 'Cup'; | ||||
| 				case 6: | ||||
| 					{ | ||||
| 						return 'Stunts'; | ||||
| 					} | ||||
| 					return 'Stunts'; | ||||
| 				default: | ||||
| 					{ | ||||
| 						return 'Unknown'; | ||||
| 					} | ||||
| 					return 'Unknown'; | ||||
| 			} | ||||
| 		} | ||||
| 		return $gameMode; | ||||
| @@ -341,7 +312,7 @@ class Server implements CallbackListener { | ||||
| 		} | ||||
| 		 | ||||
| 		// Load replay file | ||||
| 		$ghostReplay = file_get_contents($dataDir . 'Replays/' . $fileName); | ||||
| 		$ghostReplay = file_get_contents("{$dataDir}Replays/{$fileName}"); | ||||
| 		if (!$ghostReplay) { | ||||
| 			trigger_error("Couldn't retrieve saved ghost replay."); | ||||
| 			return null; | ||||
| @@ -359,10 +330,8 @@ class Server implements CallbackListener { | ||||
| 		$this->maniaControl->client->query('GetStatus'); | ||||
| 		$response = $this->maniaControl->client->getResponse(); | ||||
| 		// Check if server has the given status | ||||
| 		if ($response['Code'] === 4) { | ||||
| 			return true; | ||||
| 		} | ||||
| 		// Server not yet in given status -> Wait for it... | ||||
| 		if ($response['Code'] === 4) return true; | ||||
| 		// Server not yet in given status - Wait for it... | ||||
| 		$waitBegin = time(); | ||||
| 		$maxWaitTime = 20; | ||||
| 		$lastStatus = $response['Name']; | ||||
| @@ -373,7 +342,7 @@ class Server implements CallbackListener { | ||||
| 			$this->maniaControl->client->query('GetStatus'); | ||||
| 			$response = $this->maniaControl->client->getResponse(); | ||||
| 			if ($lastStatus !== $response['Name']) { | ||||
| 				$this->maniaControl->log("New Status: " . $response['Name']); | ||||
| 				$this->maniaControl->log("New Status: {$response['Name']}"); | ||||
| 				$lastStatus = $response['Name']; | ||||
| 			} | ||||
| 			if (time() - $maxWaitTime > $waitBegin) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user