Network implementation with asio for client. More...
#include <AsioClient.hpp>
Public Types | |
using | PacketHandler = std::function<void(const rnp::PacketHeader &, const std::vector<uint8_t> &)> |
![]() | |
using | PacketHandler = std::function<void(const rnp::PacketHeader &, const std::vector<uint8_t> &)> |
Public Member Functions | |
AsioClient () | |
~AsioClient () override=default | |
AsioClient (const AsioClient &)=delete | |
AsioClient (AsioClient &&)=delete | |
AsioClient & | operator= (const AsioClient &)=delete |
AsioClient & | operator= (AsioClient &&)=delete |
const std::string | getName () const override |
utl::PluginType | getType () const override |
void | connect (const std::string &host, uint16_t port) override |
void | disconnect () override |
void | sendConnect (const std::string &playerName) |
void | sendConnectWithCaps (const std::string &playerName, std::uint32_t clientCaps) |
void | sendDisconnect () |
void | sendDisconnect (rnp::DisconnectReason reason) |
void | sendPlayerInput (uint8_t direction, uint8_t shooting) |
void | sendPlayerInputAsEvent (std::uint16_t playerId, uint8_t direction, uint8_t shooting, uint32_t clientTimeMs) |
void | sendPing () |
void | sendPing (std::uint32_t nonce, std::uint32_t sendTimeMs) |
void | sendAck (std::uint32_t cumulative, std::uint32_t ackBits) |
void | setPacketHandler (rnp::PacketType type, PacketHandler handler) |
void | setEventsHandler (std::function< void(const std::vector< rnp::EventRecord > &)> handler) |
std::uint32_t | getSessionId () const |
std::uint16_t | getServerTickRate () const |
![]() | |
virtual | ~INetworkClient ()=default |
![]() | |
virtual | ~IPlugin ()=default |
Private Member Functions | |
void | startReceive () |
void | handleReceive (const asio::error_code &error, std::size_t bytesTransferred) |
void | handleSend (const asio::error_code &error, std::size_t bytesTransferred) |
void | processPacket (const std::vector< uint8_t > &data) |
void | processEvents (const std::vector< uint8_t > &payload) |
void | handleConnectAccept (const std::vector< uint8_t > &payload) |
void | handleReliablePacket (const rnp::PacketHeader &header) |
void | processAck (const std::vector< uint8_t > &payload) |
void | processWorldState (const std::vector< uint8_t > &payload) |
void | processEntityEvent (const std::vector< uint8_t > &payload) |
void | retransmitReliable () |
Private Attributes | |
asio::io_context | m_ioContext |
asio::ip::udp::socket | m_socket |
asio::ip::udp::endpoint | m_serverEndpoint |
std::array< uint8_t, rnp::MAX_PAYLOAD+16 > | m_recvBuffer |
std::unique_ptr< asio::executor_work_guard< asio::io_context::executor_type > > | m_workGuard |
std::thread | m_ioThread |
std::unordered_map< rnp::PacketType, PacketHandler > | m_packetHandlers |
std::function< void(const std::vector< rnp::EventRecord > &)> | m_eventsHandler |
uint32_t | m_sequenceNumber = 0 |
bool | m_connected = false |
std::uint32_t | m_sessionId = 0 |
std::uint16_t | m_serverTickRate = 0 |
std::uint16_t | m_serverMtu = 0 |
std::uint32_t | m_serverCaps = 0 |
std::uint32_t | m_clientCaps = 0 |
std::unordered_map< std::uint32_t, std::vector< uint8_t > > | m_pendingReliable |
std::uint32_t | m_lastAckSent = 0 |
Network implementation with asio for client.
Definition at line 30 of file AsioClient.hpp.
using eng::AsioClient::PacketHandler = std::function<void(const rnp::PacketHeader &, const std::vector<uint8_t> &)> |
Definition at line 33 of file AsioClient.hpp.
eng::AsioClient::AsioClient | ( | ) |
Definition at line 10 of file asioClient.cpp.
|
overridedefault |
|
delete |
|
delete |
|
overridevirtual |
Implements eng::INetworkClient.
Definition at line 12 of file asioClient.cpp.
|
overridevirtual |
Implements eng::INetworkClient.
Definition at line 47 of file asioClient.cpp.
|
inlinenodiscardoverridevirtual |
Implements utl::IPlugin.
Definition at line 43 of file AsioClient.hpp.
|
inlinevirtual |
Implements eng::INetworkClient.
Definition at line 65 of file AsioClient.hpp.
References m_serverTickRate.
|
inlinevirtual |
Implements eng::INetworkClient.
Definition at line 64 of file AsioClient.hpp.
References m_sessionId.
|
inlinenodiscardoverridevirtual |
Implements utl::IPlugin.
Definition at line 44 of file AsioClient.hpp.
References utl::NETWORK_CLIENT.
|
private |
Definition at line 286 of file asioClient.cpp.
|
private |
Definition at line 428 of file asioClient.cpp.
|
private |
Definition at line 312 of file asioClient.cpp.
|
private |
Definition at line 443 of file asioClient.cpp.
|
delete |
|
delete |
|
private |
Definition at line 318 of file asioClient.cpp.
|
private |
Definition at line 368 of file asioClient.cpp.
References rnp::deserializeEvents().
|
private |
|
private |
Definition at line 451 of file asioClient.cpp.
References rnp::ACK, rnp::ACK_REQ, rnp::CONNECT_ACCEPT, rnp::deserializeHeader(), rnp::ENTITY_EVENT, rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::PACKET_ERROR, rnp::PONG, rnp::RELIABLE, rnp::PacketHeader::sequence, rnp::PacketHeader::sessionId, rnp::PacketHeader::type, and rnp::WORLD_STATE.
|
private |
Definition at line 348 of file asioClient.cpp.
|
private |
Definition at line 409 of file asioClient.cpp.
|
virtual |
Implements eng::INetworkClient.
Definition at line 242 of file asioClient.cpp.
References rnp::ACK, rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::PacketHeader::sessionId, and rnp::PacketHeader::type.
|
virtual |
Implements eng::INetworkClient.
Definition at line 76 of file asioClient.cpp.
|
virtual |
Implements eng::INetworkClient.
Definition at line 78 of file asioClient.cpp.
References rnp::ACK_REQ, rnp::CONNECT, rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::RELIABLE, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::PacketHeader::sessionId, and rnp::PacketHeader::type.
|
virtual |
Implements eng::INetworkClient.
Definition at line 110 of file asioClient.cpp.
References rnp::CLIENT_REQUEST.
|
virtual |
Implements eng::INetworkClient.
Definition at line 112 of file asioClient.cpp.
References rnp::DISCONNECT, rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::PacketHeader::sessionId, and rnp::PacketHeader::type.
|
virtual |
Implements eng::INetworkClient.
Definition at line 192 of file asioClient.cpp.
References rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::PING, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::PacketHeader::sessionId, and rnp::PacketHeader::type.
|
virtual |
Implements eng::INetworkClient.
Definition at line 209 of file asioClient.cpp.
References rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::PING, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::PacketHeader::sessionId, and rnp::PacketHeader::type.
|
virtual |
Implements eng::INetworkClient.
Definition at line 136 of file asioClient.cpp.
References rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::PLAYER_INPUT, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::PacketHeader::sessionId, and rnp::PacketHeader::type.
|
virtual |
Implements eng::INetworkClient.
Definition at line 154 of file asioClient.cpp.
References rnp::EventRecord::data, rnp::ENTITY_EVENT, rnp::EventRecord::entityId, rnp::PacketHeader::flags, rnp::INPUT, rnp::PacketHeader::length, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::serializeEvents(), rnp::PacketHeader::sessionId, rnp::EventRecord::type, and rnp::PacketHeader::type.
|
virtual |
Implements eng::INetworkClient.
Definition at line 281 of file asioClient.cpp.
|
virtual |
Implements eng::INetworkClient.
Definition at line 276 of file asioClient.cpp.
|
private |
Definition at line 421 of file asioClient.cpp.
|
private |
Definition at line 95 of file AsioClient.hpp.
|
private |
Definition at line 90 of file AsioClient.hpp.
|
private |
Definition at line 88 of file AsioClient.hpp.
|
private |
Definition at line 80 of file AsioClient.hpp.
|
private |
Definition at line 86 of file AsioClient.hpp.
|
private |
Definition at line 97 of file AsioClient.hpp.
|
private |
Definition at line 87 of file AsioClient.hpp.
|
private |
Definition at line 96 of file AsioClient.hpp.
|
private |
Definition at line 83 of file AsioClient.hpp.
|
private |
Definition at line 89 of file AsioClient.hpp.
|
private |
Definition at line 94 of file AsioClient.hpp.
|
private |
Definition at line 82 of file AsioClient.hpp.
|
private |
Definition at line 93 of file AsioClient.hpp.
|
private |
Definition at line 92 of file AsioClient.hpp.
Referenced by getServerTickRate().
|
private |
Definition at line 91 of file AsioClient.hpp.
Referenced by getSessionId().
|
private |
Definition at line 81 of file AsioClient.hpp.
|
private |
Definition at line 85 of file AsioClient.hpp.