#include #include #include #include #include #include #include namespace blitz { namespace server { DisconnectSystem::DisconnectSystem(entt::registry&, EnttWorld& a_World, Server& a_Server) : m_World(a_World), m_Server(a_Server) {} void DisconnectSystem::Update(Nz::Time elapsedTime) { AtomicEnttWorld world = m_World; entt::registry& registry = world->GetRegistry(); auto disconnects = registry.view(); // broadcast player leave for (auto entity : disconnects) { auto* player = registry.try_get(entity); if (player) { for (auto [entity, connection] : registry.view().each()) { connection.m_Connection->SendPlayerLeave({player->m_PlayerId}); } LogD(Format("[Server] %s left !", player->m_Pseudo.c_str())); } } // close connections registry.view().each( [this](auto entity, EnetConnectionComponent& connection, DisconnectComponent disconnect) { m_Server.CloseConnection(connection.m_Connection->GetPeerId()); }); // remove the entities for (auto entity : disconnects) { registry.emplace(entity); } } } // namespace server } // namespace blitz