Network implementation with asio for server. More...
#include <AsioServer.hpp>
Public Types | |
using | PacketHandler |
using | ClientInfo |
Public Member Functions | |
AsioServer () | |
~AsioServer () override | |
AsioServer (const AsioServer &)=delete | |
AsioServer (AsioServer &&)=delete | |
AsioServer & | operator= (const AsioServer &)=delete |
AsioServer & | operator= (AsioServer &&)=delete |
void | init (const std::string &host, uint16_t port) override |
const std::string | getName () const override |
utl::PluginType | getType () const override |
void | start () override |
void | stop () override |
void | sendConnectAccept (const asio::ip::udp::endpoint &client, std::uint32_t sessionId) |
void | sendWorldState (const asio::ip::udp::endpoint &client, std::uint32_t serverTick, const std::vector< rnp::EntityState > &entities) |
void | sendWorldState (const asio::ip::udp::endpoint &client, const std::vector< uint8_t > &worldData) |
void | sendEntityEvent (const asio::ip::udp::endpoint &client, std::uint32_t serverTick, const std::vector< rnp::EventRecord > &events) |
void | sendEvents (const asio::ip::udp::endpoint &client, const std::vector< rnp::EventRecord > &events) |
void | sendPong (const asio::ip::udp::endpoint &client, std::uint32_t nonce, std::uint32_t sendTimeMs) |
void | sendPong (const asio::ip::udp::endpoint &client) |
void | sendError (const asio::ip::udp::endpoint &client, rnp::ErrorCode errorCode, const std::string &errorMessage) |
void | sendError (const asio::ip::udp::endpoint &client, const std::string &errorMessage) |
void | sendAck (const asio::ip::udp::endpoint &client, std::uint32_t cumulative, std::uint32_t ackBits) |
void | broadcastToAll (const std::vector< uint8_t > &data) |
void | broadcastEntityEvents (std::uint32_t serverTick, const std::vector< rnp::EventRecord > &events) |
void | broadcastEvents (const std::vector< rnp::EventRecord > &events) |
void | setPacketHandler (rnp::PacketType type, PacketHandler handler) |
void | setTickRate (std::uint16_t tickRate) |
void | setServerCapabilities (std::uint32_t caps) |
const std::unordered_map< asio::ip::udp::endpoint, ClientInfo > & | getClients () const |
![]() | |
virtual | ~INetworkServer ()=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 asio::ip::udp::endpoint &sender, const std::vector< uint8_t > &data) |
void | addClient (const asio::ip::udp::endpoint &endpoint, const std::string &playerName, std::uint32_t clientCaps, std::uint32_t sessionId) |
void | removeClient (const asio::ip::udp::endpoint &endpoint) |
std::uint16_t | getPlayerId (const asio::ip::udp::endpoint &endpoint) const |
std::uint32_t | getSessionId (const asio::ip::udp::endpoint &endpoint) const |
void | handleReliablePacket (const asio::ip::udp::endpoint &sender, const rnp::PacketHeader &header) |
void | processAck (const asio::ip::udp::endpoint &sender, 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_remoteEndpoint |
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< asio::ip::udp::endpoint, ClientInfo > | m_clients |
std::unordered_map< rnp::PacketType, PacketHandler > | m_packetHandlers |
uint32_t | m_sequenceNumber = 0 |
std::uint16_t | m_nextPlayerId = 1 |
std::uint32_t | m_nextSessionId = 1 |
std::uint16_t | m_tickRateHz = 60 |
std::uint16_t | m_mtuPayloadBytes = 508 |
std::uint32_t | m_serverCaps = 0 |
std::unordered_map< std::uint32_t, std::vector< uint8_t > > | m_pendingReliable |
std::unordered_map< asio::ip::udp::endpoint, std::uint32_t > | m_clientLastAck |
Network implementation with asio for server.
Definition at line 29 of file AsioServer.hpp.
Definition at line 34 of file AsioServer.hpp.
Definition at line 32 of file AsioServer.hpp.
srv::AsioServer::AsioServer | ( | ) |
Definition at line 8 of file asioServer.cpp.
|
override |
Definition at line 63 of file asioServer.cpp.
|
delete |
|
delete |
|
private |
Definition at line 256 of file asioServer.cpp.
void srv::AsioServer::broadcastEntityEvents | ( | std::uint32_t | serverTick, |
const std::vector< rnp::EventRecord > & | events ) |
Definition at line 630 of file asioServer.cpp.
References rnp::ENTITY_EVENT, rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::serializeEvents(), rnp::PacketHeader::sessionId, and rnp::PacketHeader::type.
void srv::AsioServer::broadcastEvents | ( | const std::vector< rnp::EventRecord > & | events | ) |
Definition at line 605 of file asioServer.cpp.
References rnp::ENTITY_EVENT, rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::serializeEvents(), rnp::PacketHeader::sessionId, and rnp::PacketHeader::type.
void srv::AsioServer::broadcastToAll | ( | const std::vector< uint8_t > & | data | ) |
Definition at line 592 of file asioServer.cpp.
|
inline |
Definition at line 81 of file AsioServer.hpp.
References m_clients.
|
inlinenodiscardoverridevirtual |
Implements utl::IPlugin.
Definition at line 54 of file AsioServer.hpp.
|
private |
Definition at line 272 of file asioServer.cpp.
|
private |
Definition at line 282 of file asioServer.cpp.
|
inlinenodiscardoverridevirtual |
Implements utl::IPlugin.
Definition at line 55 of file AsioServer.hpp.
References utl::NETWORK_SERVER.
|
private |
Definition at line 71 of file asioServer.cpp.
|
private |
Definition at line 677 of file asioServer.cpp.
References rnp::PacketHeader::sequence.
|
private |
Definition at line 90 of file asioServer.cpp.
|
overridevirtual |
Implements srv::INetworkServer.
Definition at line 10 of file asioServer.cpp.
|
delete |
|
delete |
|
private |
Definition at line 688 of file asioServer.cpp.
|
private |
Definition at line 98 of file asioServer.cpp.
References rnp::ACK, rnp::ACK_REQ, rnp::CONNECT, rnp::EventRecord::data, rnp::deserializeEvents(), rnp::deserializeHeader(), rnp::DISCONNECT, rnp::ENTITY_EVENT, rnp::EventRecord::entityId, rnp::PacketHeader::flags, rnp::INPUT, rnp::INVALID_PAYLOAD, rnp::PacketHeader::length, rnp::PING, rnp::PLAYER_INPUT, rnp::RELIABLE, rnp::PacketHeader::sequence, rnp::PacketHeader::sessionId, rnp::EventRecord::type, rnp::PacketHeader::type, and rnp::UNAUTHORIZED_SESSION.
|
private |
Definition at line 270 of file asioServer.cpp.
|
private |
Definition at line 720 of file asioServer.cpp.
void srv::AsioServer::sendAck | ( | const asio::ip::udp::endpoint & | client, |
std::uint32_t | cumulative, | ||
std::uint32_t | ackBits ) |
Definition at line 334 of file asioServer.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.
void srv::AsioServer::sendConnectAccept | ( | const asio::ip::udp::endpoint & | client, |
std::uint32_t | sessionId ) |
Definition at line 292 of file asioServer.cpp.
References rnp::ACK_REQ, rnp::CONNECT_ACCEPT, rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::RELIABLE, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::PacketHeader::sessionId, and rnp::PacketHeader::type.
void srv::AsioServer::sendEntityEvent | ( | const asio::ip::udp::endpoint & | client, |
std::uint32_t | serverTick, | ||
const std::vector< rnp::EventRecord > & | events ) |
Definition at line 469 of file asioServer.cpp.
References rnp::ENTITY_EVENT, rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::serializeEvents(), rnp::PacketHeader::sessionId, and rnp::PacketHeader::type.
void srv::AsioServer::sendError | ( | const asio::ip::udp::endpoint & | client, |
const std::string & | errorMessage ) |
Definition at line 556 of file asioServer.cpp.
References rnp::INTERNAL_ERROR.
void srv::AsioServer::sendError | ( | const asio::ip::udp::endpoint & | client, |
rnp::ErrorCode | errorCode, | ||
const std::string & | errorMessage ) |
Definition at line 561 of file asioServer.cpp.
References rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::PACKET_ERROR, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::PacketHeader::sessionId, and rnp::PacketHeader::type.
void srv::AsioServer::sendEvents | ( | const asio::ip::udp::endpoint & | client, |
const std::vector< rnp::EventRecord > & | events ) |
Definition at line 450 of file asioServer.cpp.
References rnp::ENTITY_EVENT, rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::serializeEvents(), rnp::PacketHeader::sessionId, and rnp::PacketHeader::type.
void srv::AsioServer::sendPong | ( | const asio::ip::udp::endpoint & | client | ) |
Definition at line 506 of file asioServer.cpp.
References rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::PONG, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::PacketHeader::sessionId, and rnp::PacketHeader::type.
void srv::AsioServer::sendPong | ( | const asio::ip::udp::endpoint & | client, |
std::uint32_t | nonce, | ||
std::uint32_t | sendTimeMs ) |
Definition at line 523 of file asioServer.cpp.
References rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::PONG, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::PacketHeader::sessionId, and rnp::PacketHeader::type.
void srv::AsioServer::sendWorldState | ( | const asio::ip::udp::endpoint & | client, |
const std::vector< uint8_t > & | worldData ) |
Definition at line 367 of file asioServer.cpp.
References rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::PacketHeader::sessionId, rnp::PacketHeader::type, and rnp::WORLD_STATE.
void srv::AsioServer::sendWorldState | ( | const asio::ip::udp::endpoint & | client, |
std::uint32_t | serverTick, | ||
const std::vector< rnp::EntityState > & | entities ) |
Definition at line 384 of file asioServer.cpp.
References rnp::PacketHeader::flags, rnp::PacketHeader::length, rnp::PacketHeader::reserved, rnp::PacketHeader::sequence, rnp::serialize(), rnp::PacketHeader::sessionId, rnp::PacketHeader::type, and rnp::WORLD_STATE.
void srv::AsioServer::setPacketHandler | ( | rnp::PacketType | type, |
PacketHandler | handler ) |
Definition at line 672 of file asioServer.cpp.
|
inlinevirtual |
Implements srv::INetworkServer.
Definition at line 79 of file AsioServer.hpp.
References m_serverCaps.
|
inlinevirtual |
Implements srv::INetworkServer.
Definition at line 78 of file AsioServer.hpp.
References m_tickRateHz.
|
overridevirtual |
Implements srv::INetworkServer.
Definition at line 20 of file asioServer.cpp.
|
private |
Definition at line 65 of file asioServer.cpp.
|
overridevirtual |
Implements srv::INetworkServer.
Definition at line 41 of file asioServer.cpp.
|
private |
Definition at line 113 of file AsioServer.hpp.
|
private |
Definition at line 104 of file AsioServer.hpp.
Referenced by getClients().
|
private |
Definition at line 97 of file AsioServer.hpp.
|
private |
Definition at line 103 of file AsioServer.hpp.
|
private |
Definition at line 110 of file AsioServer.hpp.
|
private |
Definition at line 107 of file AsioServer.hpp.
|
private |
Definition at line 108 of file AsioServer.hpp.
|
private |
Definition at line 105 of file AsioServer.hpp.
|
private |
Definition at line 112 of file AsioServer.hpp.
|
private |
Definition at line 100 of file AsioServer.hpp.
|
private |
Definition at line 99 of file AsioServer.hpp.
|
private |
Definition at line 106 of file AsioServer.hpp.
|
private |
Definition at line 111 of file AsioServer.hpp.
Referenced by setServerCapabilities().
|
private |
Definition at line 98 of file AsioServer.hpp.
|
private |
Definition at line 109 of file AsioServer.hpp.
Referenced by setTickRate().
|
private |
Definition at line 102 of file AsioServer.hpp.