#pragma once #include "CComponent.h" #include "CNetTransceiver.h" #include "U_Networking.h" #include "CNetMessagesManager.h" #include "U_TypeDefs.h" #include #include #include #include "boost/asio.hpp" class CClient : public CComponent { public: void V_Update() override; void Connect(const CEndPoint& srv); void Connect(const std::string& hostname); void Reset(); void ProcessDatagram(boost::asio::ip::udp::endpoint point, std::vector& buffer, CTimePoint ptime); void HandleServerPacket(std::vector& buffer, CTimePoint ptime); void SendConnectionCookie(); void SendReliableMessage(std::shared_ptr msg); void SendUnreliableMessage(std::shared_ptr msg); void SetServerRate(double timesPerSecond = 33.0); double GetServerRate() const; std::unordered_map ServerEntityMap; //sv_id -> cl_id std::unique_ptr Transceiver; DEFINE_COMPONENT(); private: CNetMessagesManager NetMessagesManager; CEndPoint ServerPoint; double m_svRate = 33.0; bool Authorized = false; bool Disconnected = false; bool SentCookie = false; std::uint32_t ConnectionAttempts = 0; CTimePoint LastPacket; };