#pragma once #include #include namespace td { namespace server { class IServerSocket; class PlayerManager { private: std::map m_Players; std::shared_ptr m_Socket; public: utils::Signal OnPlayerJoin; utils::Signal OnPlayerLeave; PlayerManager(const std::shared_ptr& a_Socket); ~PlayerManager(); void RemovePlayer(PlayerID a_Player); PlayerInfo GetPlayer(PlayerID a_Player); private: void Disconnect(PlayerID a_Player); class ConnectionHandler : public protocol::PacketHandler { private: PlayerManager& m_PlayerManager; PlayerID m_Player; public: ConnectionHandler(PlayerManager& a_PlayerManager, PlayerID a_Player); ~ConnectionHandler() = default; virtual void Handle(const protocol::packets::PlayerLoginPacket& a_Packet) override; virtual void Handle(const protocol::packets::DisconnectPacket& a_Packet) override; }; }; } // namespace server } // namespace td