Don't disconnect when game is over

This commit is contained in:
2023-08-14 14:25:10 +02:00
parent 7986e55846
commit 60b81003c0
3 changed files with 19 additions and 15 deletions

View File

@@ -33,9 +33,14 @@ Lobby::Lobby(Server* server) : m_Server(server), m_Timer(1000, std::bind(&Lobby:
} }
void Lobby::OpenLobby() { void Lobby::OpenLobby() {
m_Players.clear();
m_LobbyOpened = true; m_LobbyOpened = true;
m_StartTimerTime = 0; 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() { void Lobby::Tick() {
@@ -57,11 +62,12 @@ void Lobby::SendTimeRemaining() {
} }
void Lobby::OnPlayerJoin(std::uint8_t playerID) { void Lobby::OnPlayerJoin(std::uint8_t playerID) {
m_Players.push_back(playerID);
utils::LOG("(Server) Player Joined Lobby !");
if (!m_LobbyOpened) if (!m_LobbyOpened)
return; 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 if (m_Players.size() == MIN_PLAYER_WAITING) { // start timer if a second player join the match
m_StartTimerTime = utils::GetTime(); m_StartTimerTime = utils::GetTime();
m_Timer.Reset(); m_Timer.Reset();
@@ -69,17 +75,18 @@ void Lobby::OnPlayerJoin(std::uint8_t playerID) {
} }
} }
void Lobby::OnPlayerLeave(std::uint8_t playerID) { void Lobby::OnPlayerLeave(std::uint8_t playerID)
if (!m_LobbyOpened) {
return;
utils::LOG("(Server) Player Leaved Lobby !");
auto it = std::find(m_Players.begin(), m_Players.end(), playerID); auto it = std::find(m_Players.begin(), m_Players.end(), playerID);
if (it == m_Players.end()) if (it == m_Players.end())
return; return;
m_Players.erase(it); m_Players.erase(it);
utils::LOG("(Server) Player Leaved Lobby !");
if (!m_LobbyOpened)
return;
if (m_Players.size() == 1) { if (m_Players.size() == 1) {
protocol::UpdateLobbyTimePacket packet(0); protocol::UpdateLobbyTimePacket packet(0);
m_Server->BroadcastPacket(&packet); m_Server->BroadcastPacket(&packet);

View File

@@ -54,9 +54,9 @@ void Server::StartThread() {
void Server::Restart() { void Server::Restart() {
m_Game.Reset(); m_Game.Reset();
m_Game.SetGameState(game::GameState::Lobby);
m_Lobby.OpenLobby(); m_Lobby.OpenLobby();
m_Game.NotifyListeners(&game::GameListener::OnGameStateUpdate, game::GameState::Lobby);
} }
void Server::Close() { void Server::Close() {

View File

@@ -118,9 +118,6 @@ void ServerGame::OnGameEnd() {
void ServerGame::OnGameClose() { void ServerGame::OnGameClose() {
NotifyListeners(&game::GameListener::OnGameStateUpdate, game::GameState::Closed); NotifyListeners(&game::GameListener::OnGameStateUpdate, game::GameState::Closed);
// Disconnect clients
protocol::DisconnectPacket packet("Game finished");
m_Server->BroadcastPacket(&packet);
// Put back to lobby state // Put back to lobby state
m_Server->Restart(); m_Server->Restart();