Don't disconnect when game is over
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user