#pragma once #include #include #include #include namespace td { namespace client { class ClientState; class LoggingState; class Client : public StateMachine { private: std::shared_ptr m_Socket; PlayerManager m_Players; std::optional m_Id; public: Client(const std::shared_ptr& a_Socket); ~Client(); void SendPacket(const protocol::PacketBase& a_Packet); void Disconnect(); const PlayerManager& GetPlayers() const { return m_Players; } const std::optional GetId() const { return m_Id; } friend class ClientState; friend class LoggingState; }; } // namespace client } // namespace td