diff --git a/src/client/game/WorldClient.cpp b/src/client/game/WorldClient.cpp index 03b4e7d..b3b681e 100644 --- a/src/client/game/WorldClient.cpp +++ b/src/client/game/WorldClient.cpp @@ -50,7 +50,9 @@ void WorldClient::HandlePacket(const protocol::SpawnMobPacket* packet) { void WorldClient::HandlePacket(const protocol::UpgradeTowerPacket* packet) { game::TowerPtr tower = GetTowerById(packet->GetTowerID()); - if (tower == nullptr) return; // this should not happen but who knows ? + + SAFE_CHECK(tower); + tower->Upgrade(packet->GetTowerLevel().GetLevel(), packet->GetTowerLevel().GetPath()); } @@ -63,9 +65,9 @@ void WorldClient::HandlePacket(const protocol::WorldAddTowerPacket* packet) { void WorldClient::HandlePacket(const protocol::RemoveTowerPacket* packet) { game::TowerPtr tower = RemoveTower(packet->GetTowerID()); - if (tower != nullptr) { - GetWorldNotifier().NotifyListeners(&WorldListener::OnTowerRemove, tower); - } + SAFE_CHECK(tower); + + GetWorldNotifier().NotifyListeners(&WorldListener::OnTowerRemove, tower); } void WorldClient::HandlePacket(const protocol::UpdateMobStatesPacket* packet) { diff --git a/src/server/ServerConnexion.cpp b/src/server/ServerConnexion.cpp index e75692d..7b1d6b7 100644 --- a/src/server/ServerConnexion.cpp +++ b/src/server/ServerConnexion.cpp @@ -92,62 +92,67 @@ void ServerConnexion::SendKeepAlive() { } void ServerConnexion::HandlePacket(const protocol::PlayerLoginPacket* packet) { - if (m_Player->GetName().empty() && !packet->GetPlayerName().empty()) { - m_Player->SetName(packet->GetPlayerName()); - utils::LOG(utils::format("\t[%s] joined !", m_Player->GetName().c_str())); + SAFE_CHECK(m_Player->GetName().empty() && !packet->GetPlayerName().empty()); - protocol::PlayerJoinPacket joinPacket(m_ID, m_Player->GetName()); - m_Server->BroadcastPacket(&joinPacket); - std::map playerNames; - for (const auto& pair : m_Server->GetPlayers()) { - const game::Player& player = pair.second; - if (!player.GetName().empty()) { - protocol::PlayerInfo playerInfo; - playerInfo.name = player.GetName(); - playerInfo.team = player.GetTeamColor(); - playerNames.insert({ player.GetID(), playerInfo }); - } + + m_Player->SetName(packet->GetPlayerName()); + + utils::LOG(utils::format("\t[%s] joined !", m_Player->GetName().c_str())); + + protocol::PlayerJoinPacket joinPacket(m_ID, m_Player->GetName()); + m_Server->BroadcastPacket(&joinPacket); + + std::map playerNames; + for (const auto& pair : m_Server->GetPlayers()) { + const game::Player& player = pair.second; + if (!player.GetName().empty()) { + protocol::PlayerInfo playerInfo; + playerInfo.name = player.GetName(); + playerInfo.team = player.GetTeamColor(); + playerNames.insert({ player.GetID(), playerInfo }); } - - protocol::PlayerListPacket listPacket(playerNames); - SendPacket(&listPacket); - - protocol::UpdateGameStatePacket statePacket(m_Server->GetGame().GetGameState()); - SendPacket(&statePacket); - - m_Server->GetGame().NotifyListeners(&game::GameListener::OnPlayerJoin, m_ID); - - protocol::WorldBeginDataPacket headerDataPacket(m_Server->GetGame().GetWorld()); - protocol::WorldDataPacket dataPacket(m_Server->GetGame().GetWorld()); - SendPacket(&headerDataPacket); - SendPacket(&dataPacket); } + + protocol::PlayerListPacket listPacket(playerNames); + SendPacket(&listPacket); + + protocol::UpdateGameStatePacket statePacket(m_Server->GetGame().GetGameState()); + SendPacket(&statePacket); + + m_Server->GetGame().NotifyListeners(&game::GameListener::OnPlayerJoin, m_ID); + + protocol::WorldBeginDataPacket headerDataPacket(m_Server->GetGame().GetWorld()); + protocol::WorldDataPacket dataPacket(m_Server->GetGame().GetWorld()); + SendPacket(&headerDataPacket); + SendPacket(&dataPacket); + } void ServerConnexion::HandlePacket(const protocol::SelectTeamPacket* packet) { SAFE_CHECK(m_Server->GetGame().GetGameState() == game::GameState::Lobby); + SAFE_CHECK(static_cast(packet->GetSelectedTeam()) >= -1 || + static_cast(packet->GetSelectedTeam()) <= 1); - if (static_cast(packet->GetSelectedTeam()) >= -1 || static_cast(packet->GetSelectedTeam()) <= 1) { - if (m_Player->GetTeamColor() == game::TeamColor::None) { // join a team - m_Server->GetGame().GetTeam(packet->GetSelectedTeam()).AddPlayer(m_Player); - } else if (packet->GetSelectedTeam() == game::TeamColor::None) { // leave a team - m_Server->GetGame().GetTeam(m_Player->GetTeamColor()).RemovePlayer(m_Player); - m_Player->SetTeamColor(game::TeamColor::None); - } else { // change team - m_Server->GetGame().GetTeam(m_Player->GetTeamColor()).RemovePlayer(m_Player); - m_Server->GetGame().GetTeam(packet->GetSelectedTeam()).AddPlayer(m_Player); - } - m_Player->SetTeamColor(packet->GetSelectedTeam()); - protocol::UpdatePlayerTeamPacket updateTeamPacket(m_ID, packet->GetSelectedTeam()); - m_Server->BroadcastPacket(&updateTeamPacket); + if (m_Player->GetTeamColor() == game::TeamColor::None) { // join a team + m_Server->GetGame().GetTeam(packet->GetSelectedTeam()).AddPlayer(m_Player); + } else if (packet->GetSelectedTeam() == game::TeamColor::None) { // leave a team + m_Server->GetGame().GetTeam(m_Player->GetTeamColor()).RemovePlayer(m_Player); + m_Player->SetTeamColor(game::TeamColor::None); + } else { // change team + m_Server->GetGame().GetTeam(m_Player->GetTeamColor()).RemovePlayer(m_Player); + m_Server->GetGame().GetTeam(packet->GetSelectedTeam()).AddPlayer(m_Player); } + m_Player->SetTeamColor(packet->GetSelectedTeam()); + protocol::UpdatePlayerTeamPacket updateTeamPacket(m_ID, packet->GetSelectedTeam()); + m_Server->BroadcastPacket(&updateTeamPacket); } void ServerConnexion::HandlePacket(const protocol::KeepAlivePacket* packet) { - if (packet->GetAliveID() == m_KeepAlive.keepAliveID) - m_KeepAlive.recievedResponse = true; + SAFE_CHECK(packet->GetAliveID() == m_KeepAlive.keepAliveID); + + m_KeepAlive.recievedResponse = true; } void ServerConnexion::HandlePacket(const protocol::DisconnectPacket* packet) { @@ -209,8 +214,9 @@ void ServerConnexion::HandlePacket(const protocol::RemoveTowerPacket* packet) { } ServerConnexion::~ServerConnexion() { - if (GetDispatcher() != nullptr) - GetDispatcher()->UnregisterHandler(this); + SAFE_CHECK(GetDispatcher() != nullptr); + + GetDispatcher()->UnregisterHandler(this); } } // namespace server