diff --git a/src/server/Lobby.cpp b/src/server/Lobby.cpp index 0f7785a..f8daa21 100644 --- a/src/server/Lobby.cpp +++ b/src/server/Lobby.cpp @@ -33,9 +33,14 @@ Lobby::Lobby(Server* server) : m_Server(server), m_Timer(1000, std::bind(&Lobby: } void Lobby::OpenLobby() { - m_Players.clear(); m_LobbyOpened = true; m_StartTimerTime = 0; + + if (m_Players.size() >= MIN_PLAYER_WAITING) { // start timer if a enough players are here + m_StartTimerTime = utils::GetTime(); + m_Timer.Reset(); + SendTimeRemaining(); + } } void Lobby::Tick() { @@ -57,11 +62,12 @@ void Lobby::SendTimeRemaining() { } void Lobby::OnPlayerJoin(std::uint8_t playerID) { + m_Players.push_back(playerID); + utils::LOG("(Server) Player Joined Lobby !"); + if (!m_LobbyOpened) return; - - utils::LOG("(Server) Player Joined Lobby !"); - m_Players.push_back(playerID); + if (m_Players.size() == MIN_PLAYER_WAITING) { // start timer if a second player join the match m_StartTimerTime = utils::GetTime(); m_Timer.Reset(); @@ -69,17 +75,18 @@ void Lobby::OnPlayerJoin(std::uint8_t playerID) { } } -void Lobby::OnPlayerLeave(std::uint8_t playerID) { - if (!m_LobbyOpened) - return; - - utils::LOG("(Server) Player Leaved Lobby !"); - +void Lobby::OnPlayerLeave(std::uint8_t playerID) +{ auto it = std::find(m_Players.begin(), m_Players.end(), playerID); if (it == m_Players.end()) return; + m_Players.erase(it); + utils::LOG("(Server) Player Leaved Lobby !"); + if (!m_LobbyOpened) + return; + if (m_Players.size() == 1) { protocol::UpdateLobbyTimePacket packet(0); m_Server->BroadcastPacket(&packet); diff --git a/src/server/Server.cpp b/src/server/Server.cpp index 32f0317..6bf669c 100644 --- a/src/server/Server.cpp +++ b/src/server/Server.cpp @@ -54,9 +54,9 @@ void Server::StartThread() { void Server::Restart() { m_Game.Reset(); - m_Game.SetGameState(game::GameState::Lobby); - m_Lobby.OpenLobby(); + + m_Game.NotifyListeners(&game::GameListener::OnGameStateUpdate, game::GameState::Lobby); } void Server::Close() { diff --git a/src/server/game/ServerGame.cpp b/src/server/game/ServerGame.cpp index 009cc0c..f487e86 100644 --- a/src/server/game/ServerGame.cpp +++ b/src/server/game/ServerGame.cpp @@ -118,9 +118,6 @@ void ServerGame::OnGameEnd() { void ServerGame::OnGameClose() { NotifyListeners(&game::GameListener::OnGameStateUpdate, game::GameState::Closed); - // Disconnect clients - protocol::DisconnectPacket packet("Game finished"); - m_Server->BroadcastPacket(&packet); // Put back to lobby state m_Server->Restart();