#pragma once #include namespace td { namespace server { class IServerSocket; class PlayerManager { private: std::map m_Players; std::shared_ptr m_Socket; public: PlayerManager(const std::shared_ptr& a_Socket); ~PlayerManager(); void RemovePlayer(PlayerID a_Player); PlayerInfo GetPlayer(PlayerID a_Player); private: class ConnectionHandler : public protocol::PacketHandler { private: std::map& m_Players; IServerSocket& m_Socket; PlayerID m_Player; public: ConnectionHandler(std::map& a_Players, IServerSocket& a_Socket, 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; static void Disconnect(std::map&, IServerSocket& m_Socket, PlayerID m_Player); }; }; } // namespace server } // namespace td