From 5219e0206c411e38f487349c302af9ce3d3747fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20Schro=CC=88der?= Date: Sun, 4 May 2014 16:45:59 +0200 Subject: [PATCH] server empty callback --- application/core/Players/PlayerManager.php | 54 ++++++++++++---------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/application/core/Players/PlayerManager.php b/application/core/Players/PlayerManager.php index 2061a974..a9cab957 100644 --- a/application/core/Players/PlayerManager.php +++ b/application/core/Players/PlayerManager.php @@ -25,6 +25,7 @@ class PlayerManager implements CallbackListener, TimerListener { const CB_PLAYERCONNECT = 'PlayerManagerCallback.PlayerConnect'; const CB_PLAYERDISCONNECT = 'PlayerManagerCallback.PlayerDisconnect'; const CB_PLAYERINFOCHANGED = 'PlayerManagerCallback.PlayerInfoChanged'; + const CB_SERVER_EMPTY = 'PlayerManagerCallback.ServerEmpty'; const TABLE_PLAYERS = 'mc_players'; const SETTING_JOIN_LEAVE_MESSAGES = 'Enable Join & Leave Messages'; const STAT_JOIN_COUNT = 'Joins'; @@ -48,7 +49,7 @@ class PlayerManager implements CallbackListener, TimerListener { /** * Construct a new Player Manager * - * @param \ManiaControl\ManiaControl $maniaControl + * @param ManiaControl $maniaControl */ public function __construct(ManiaControl $maniaControl) { $this->maniaControl = $maniaControl; @@ -76,7 +77,7 @@ class PlayerManager implements CallbackListener, TimerListener { } /** - * Initialize necessary database tables + * Initialize necessary Database Tables * * @return bool */ @@ -100,6 +101,7 @@ class PlayerManager implements CallbackListener, TimerListener { $playerTableStatement->execute(); if ($playerTableStatement->error) { trigger_error($playerTableStatement->error, E_USER_ERROR); + $playerTableStatement->close(); return false; } $playerTableStatement->close(); @@ -212,7 +214,7 @@ class PlayerManager implements CallbackListener, TimerListener { } /** - * Handle playerConnect callback + * Handle PlayerConnect Callback * * @param array $callback */ @@ -228,7 +230,7 @@ class PlayerManager implements CallbackListener, TimerListener { } /** - * Handle playerDisconnect callback + * Handle PlayerDisconnect callback * * @param array $callback */ @@ -239,8 +241,11 @@ class PlayerManager implements CallbackListener, TimerListener { return; } - // Trigger own callback + // Trigger own callbacks $this->maniaControl->callbackManager->triggerCallback(self::CB_PLAYERDISCONNECT, $player); + if ($this->getPlayerCount(false) <= 0) { + $this->maniaControl->callbackManager->triggerCallback(self::CB_SERVER_EMPTY); + } if ($player->isFakePlayer()) { return; @@ -292,6 +297,23 @@ class PlayerManager implements CallbackListener, TimerListener { return $this->maniaControl->statisticManager->insertStat(self::STAT_SERVERTIME, $player, $this->maniaControl->server->index, $playedTime); } + /** + * Get the Count of all Player + * + * @param bool $withoutSpectators + * @return int + */ + public function getPlayerCount($withoutSpectators = true) { + $count = 0; + foreach ($this->players as $player) { + /** @var Player $player */ + if (!$player->isSpectator || !$withoutSpectators) { + $count++; + } + } + return $count; + } + /** * Update PlayerInfo * @@ -401,22 +423,6 @@ class PlayerManager implements CallbackListener, TimerListener { return $this->players; } - /** - * Gets the Count of all Player - * - * @return int - */ - public function getPlayerCount() { - $count = 0; - foreach ($this->players as $player) { - /** @var Player $player */ - if (!$player->isSpectator) { - $count++; - } - } - return $count; - } - /** * Gets the Count of all Spectators * @@ -436,7 +442,7 @@ class PlayerManager implements CallbackListener, TimerListener { /** * Gets a Player by his index * - * @param $index + * @param int $index * @param bool $connectedPlayersOnly * @return Player|null */ @@ -456,9 +462,9 @@ class PlayerManager implements CallbackListener, TimerListener { } /** - * Get's a Player out of the database + * Get a Player out of the database * - * @param $playerIndex + * @param int $playerIndex * @return Player $player */ private function getPlayerFromDatabaseByIndex($playerIndex) {