r-type  0.0.0
R-Type main
Loading...
Searching...
No Matches
rnp::HandlerPacket Class Reference

Main packet handler class. More...

#include <HandlerPacket.hpp>

+ Collaboration diagram for rnp::HandlerPacket:

Public Member Functions

 HandlerPacket ()=default
 Constructor.
 
 ~HandlerPacket ()=default
 Destructor.
 
 HandlerPacket (const HandlerPacket &)=delete
 
HandlerPacketoperator= (const HandlerPacket &)=delete
 
void setRateLimitInterval (std::chrono::milliseconds interval)
 Set rate limiting interval.
 
void onConnect (ConnectHandler handler)
 Register CONNECT packet handler.
 
void onConnectAccept (ConnectAcceptHandler handler)
 Register CONNECT_ACCEPT packet handler.
 
void onDisconnect (DisconnectHandler handler)
 Register DISCONNECT packet handler.
 
void onWorldState (WorldStateHandler handler)
 Register WORLD_STATE packet handler.
 
void onPing (PingHandler handler)
 Register PING packet handler.
 
void onPong (PongHandler handler)
 Register PONG packet handler.
 
void onError (ErrorHandler handler)
 Register ERROR packet handler.
 
void onEntityEvent (EntityEventHandler handler)
 Register ENTITY_EVENT packet handler.
 
void onLobbyListRequest (LobbyListRequestHandler handler)
 Register LOBBY_LIST_REQUEST packet handler.
 
void onLobbyListResponse (LobbyListResponseHandler handler)
 Register LOBBY_LIST_RESPONSE packet handler.
 
void onLobbyCreate (LobbyCreateHandler handler)
 Register LOBBY_CREATE packet handler.
 
void onLobbyCreateResponse (LobbyCreateResponseHandler handler)
 Register LOBBY_CREATE_RESPONSE packet handler.
 
void onLobbyJoin (LobbyJoinHandler handler)
 Register LOBBY_JOIN packet handler.
 
void onLobbyJoinResponse (LobbyJoinResponseHandler handler)
 Register LOBBY_JOIN_RESPONSE packet handler.
 
void onLobbyLeave (LobbyLeaveHandler handler)
 Register LOBBY_LEAVE packet handler.
 
void onLobbyUpdate (LobbyUpdateHandler handler)
 Register LOBBY_UPDATE packet handler.
 
void onGameStart (GameStartHandler handler)
 Register GAME_START packet handler.
 
void onStartGameRequest (StartGameRequestHandler handler)
 Register START_GAME_REQUEST packet handler.
 
HandlerResult processPacket (const std::vector< std::uint8_t > &data, const PacketContext &context)
 Process a received packet.
 
const HandlerStatsgetStats () const
 Get handler statistics.
 
void resetStats ()
 Reset statistics.
 
void clearSession (std::uint32_t sessionId)
 Clear rate limiting data for a session.
 
void clearAllSessions ()
 Clear all rate limiting data.
 

Private Member Functions

bool isRateLimited (std::uint32_t sessionId, const std::chrono::steady_clock::time_point &currentTime)
 Check rate limiting for a session.
 
void updateStats (PacketType packetType, HandlerResult result, std::size_t bytesReceived)
 Update statistics.
 
std::vector< EventRecordparseEntityEvents (Serializer &serializer, std::size_t payloadSize)
 Parse and handle ENTITY_EVENT packet.
 

Private Attributes

ConnectHandler connectHandler_
 
ConnectAcceptHandler connectAcceptHandler_
 
DisconnectHandler disconnectHandler_
 
WorldStateHandler worldStateHandler_
 
PingHandler pingHandler_
 
PongHandler pongHandler_
 
ErrorHandler errorHandler_
 
EntityEventHandler entityEventHandler_
 
AckHandler ackHandler_
 
LobbyListRequestHandler lobbyListRequestHandler_
 
LobbyListResponseHandler lobbyListResponseHandler_
 
LobbyCreateHandler lobbyCreateHandler_
 
LobbyCreateResponseHandler lobbyCreateResponseHandler_
 
LobbyJoinHandler lobbyJoinHandler_
 
LobbyJoinResponseHandler lobbyJoinResponseHandler_
 
LobbyLeaveHandler lobbyLeaveHandler_
 
LobbyUpdateHandler lobbyUpdateHandler_
 
GameStartHandler gameStartHandler_
 
StartGameRequestHandler startGameRequestHandler_
 
HandlerStats stats_
 
std::unordered_map< std::uint32_t, std::chrono::steady_clock::time_point > lastPacketTime_
 
std::chrono::milliseconds rateLimitInterval_ {10}
 

Detailed Description

Main packet handler class.

Definition at line 92 of file HandlerPacket.hpp.

Constructor & Destructor Documentation

◆ HandlerPacket() [1/2]

rnp::HandlerPacket::HandlerPacket ( )
default

Constructor.

◆ ~HandlerPacket()

rnp::HandlerPacket::~HandlerPacket ( )
default

Destructor.

◆ HandlerPacket() [2/2]

rnp::HandlerPacket::HandlerPacket ( const HandlerPacket & )
delete

Member Function Documentation

◆ clearAllSessions()

void rnp::HandlerPacket::clearAllSessions ( )
inline

Clear all rate limiting data.

Definition at line 561 of file HandlerPacket.hpp.

References lastPacketTime_.

◆ clearSession()

void rnp::HandlerPacket::clearSession ( std::uint32_t sessionId)
inline

Clear rate limiting data for a session.

Parameters
sessionIdSession to clear

Definition at line 556 of file HandlerPacket.hpp.

References lastPacketTime_.

Referenced by srv::AsioServer::disconnectClient().

+ Here is the caller graph for this function:

◆ getStats()

const HandlerStats & rnp::HandlerPacket::getStats ( ) const
inline

Get handler statistics.

Returns
Current statistics

Definition at line 545 of file HandlerPacket.hpp.

References stats_.

◆ isRateLimited()

bool rnp::HandlerPacket::isRateLimited ( std::uint32_t sessionId,
const std::chrono::steady_clock::time_point & currentTime )
inlineprivate

Check rate limiting for a session.

Parameters
sessionIdSession to check
currentTimeCurrent time
Returns
True if packet should be rate limited

Definition at line 131 of file HandlerPacket.hpp.

References lastPacketTime_, and rateLimitInterval_.

Referenced by processPacket().

+ Here is the caller graph for this function:

◆ onConnect()

void rnp::HandlerPacket::onConnect ( ConnectHandler handler)
inline

Register CONNECT packet handler.

Parameters
handlerCallback function for CONNECT packets

Definition at line 231 of file HandlerPacket.hpp.

References connectHandler_.

Referenced by srv::AsioServer::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onConnectAccept()

void rnp::HandlerPacket::onConnectAccept ( ConnectAcceptHandler handler)
inline

Register CONNECT_ACCEPT packet handler.

Parameters
handlerCallback function for CONNECT_ACCEPT packets

Definition at line 237 of file HandlerPacket.hpp.

References connectAcceptHandler_.

Referenced by eng::AsioClient::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onDisconnect()

void rnp::HandlerPacket::onDisconnect ( DisconnectHandler handler)
inline

Register DISCONNECT packet handler.

Parameters
handlerCallback function for DISCONNECT packets

Definition at line 243 of file HandlerPacket.hpp.

References disconnectHandler_.

Referenced by eng::AsioClient::setupPacketHandlers(), and srv::AsioServer::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onEntityEvent()

void rnp::HandlerPacket::onEntityEvent ( EntityEventHandler handler)
inline

Register ENTITY_EVENT packet handler.

Parameters
handlerCallback function for ENTITY_EVENT packets

Definition at line 273 of file HandlerPacket.hpp.

References entityEventHandler_.

Referenced by eng::AsioClient::setupPacketHandlers(), and srv::AsioServer::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onError()

void rnp::HandlerPacket::onError ( ErrorHandler handler)
inline

Register ERROR packet handler.

Parameters
handlerCallback function for ERROR packets

Definition at line 267 of file HandlerPacket.hpp.

References errorHandler_.

Referenced by eng::AsioClient::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onGameStart()

void rnp::HandlerPacket::onGameStart ( GameStartHandler handler)
inline

Register GAME_START packet handler.

Parameters
handlerCallback function for GAME_START packets

Definition at line 336 of file HandlerPacket.hpp.

References gameStartHandler_.

Referenced by eng::AsioClient::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onLobbyCreate()

void rnp::HandlerPacket::onLobbyCreate ( LobbyCreateHandler handler)
inline

Register LOBBY_CREATE packet handler.

Parameters
handlerCallback function for LOBBY_CREATE packets

Definition at line 294 of file HandlerPacket.hpp.

References lobbyCreateHandler_.

Referenced by srv::AsioServer::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onLobbyCreateResponse()

void rnp::HandlerPacket::onLobbyCreateResponse ( LobbyCreateResponseHandler handler)
inline

Register LOBBY_CREATE_RESPONSE packet handler.

Parameters
handlerCallback function for LOBBY_CREATE_RESPONSE packets

Definition at line 300 of file HandlerPacket.hpp.

References lobbyCreateResponseHandler_.

Referenced by eng::AsioClient::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onLobbyJoin()

void rnp::HandlerPacket::onLobbyJoin ( LobbyJoinHandler handler)
inline

Register LOBBY_JOIN packet handler.

Parameters
handlerCallback function for LOBBY_JOIN packets

Definition at line 309 of file HandlerPacket.hpp.

References lobbyJoinHandler_.

Referenced by srv::AsioServer::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onLobbyJoinResponse()

void rnp::HandlerPacket::onLobbyJoinResponse ( LobbyJoinResponseHandler handler)
inline

Register LOBBY_JOIN_RESPONSE packet handler.

Parameters
handlerCallback function for LOBBY_JOIN_RESPONSE packets

Definition at line 315 of file HandlerPacket.hpp.

References lobbyJoinResponseHandler_.

Referenced by eng::AsioClient::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onLobbyLeave()

void rnp::HandlerPacket::onLobbyLeave ( LobbyLeaveHandler handler)
inline

Register LOBBY_LEAVE packet handler.

Parameters
handlerCallback function for LOBBY_LEAVE packets

Definition at line 324 of file HandlerPacket.hpp.

References lobbyLeaveHandler_.

Referenced by srv::AsioServer::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onLobbyListRequest()

void rnp::HandlerPacket::onLobbyListRequest ( LobbyListRequestHandler handler)
inline

Register LOBBY_LIST_REQUEST packet handler.

Parameters
handlerCallback function for LOBBY_LIST_REQUEST packets

Definition at line 279 of file HandlerPacket.hpp.

References lobbyListRequestHandler_.

Referenced by srv::AsioServer::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onLobbyListResponse()

void rnp::HandlerPacket::onLobbyListResponse ( LobbyListResponseHandler handler)
inline

Register LOBBY_LIST_RESPONSE packet handler.

Parameters
handlerCallback function for LOBBY_LIST_RESPONSE packets

Definition at line 285 of file HandlerPacket.hpp.

References lobbyListResponseHandler_.

Referenced by eng::AsioClient::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onLobbyUpdate()

void rnp::HandlerPacket::onLobbyUpdate ( LobbyUpdateHandler handler)
inline

Register LOBBY_UPDATE packet handler.

Parameters
handlerCallback function for LOBBY_UPDATE packets

Definition at line 330 of file HandlerPacket.hpp.

References lobbyUpdateHandler_.

Referenced by eng::AsioClient::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onPing()

void rnp::HandlerPacket::onPing ( PingHandler handler)
inline

Register PING packet handler.

Parameters
handlerCallback function for PING packets

Definition at line 255 of file HandlerPacket.hpp.

References pingHandler_.

Referenced by eng::AsioClient::setupPacketHandlers(), and srv::AsioServer::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onPong()

void rnp::HandlerPacket::onPong ( PongHandler handler)
inline

Register PONG packet handler.

Parameters
handlerCallback function for PONG packets

Definition at line 261 of file HandlerPacket.hpp.

References pongHandler_.

Referenced by eng::AsioClient::setupPacketHandlers(), and srv::AsioServer::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onStartGameRequest()

void rnp::HandlerPacket::onStartGameRequest ( StartGameRequestHandler handler)
inline

Register START_GAME_REQUEST packet handler.

Parameters
handlerCallback function for START_GAME_REQUEST packets

Definition at line 342 of file HandlerPacket.hpp.

References startGameRequestHandler_.

Referenced by srv::AsioServer::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ onWorldState()

void rnp::HandlerPacket::onWorldState ( WorldStateHandler handler)
inline

Register WORLD_STATE packet handler.

Parameters
handlerCallback function for WORLD_STATE packets

Definition at line 249 of file HandlerPacket.hpp.

References worldStateHandler_.

Referenced by eng::AsioClient::setupPacketHandlers().

+ Here is the caller graph for this function:

◆ operator=()

HandlerPacket & rnp::HandlerPacket::operator= ( const HandlerPacket & )
delete

◆ parseEntityEvents()

std::vector< EventRecord > rnp::HandlerPacket::parseEntityEvents ( Serializer & serializer,
std::size_t payloadSize )
inlineprivate

Parse and handle ENTITY_EVENT packet.

Parameters
serializerSerializer containing the packet data
payloadSizeSize of the payload
Returns
Vector of event records

Definition at line 179 of file HandlerPacket.hpp.

References rnp::EventRecord::data, rnp::Serializer::readByte(), rnp::Serializer::readBytes(), rnp::Serializer::readUInt16(), rnp::Serializer::readUInt32(), and rnp::EventRecord::type.

Referenced by processPacket().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ processPacket()

HandlerResult rnp::HandlerPacket::processPacket ( const std::vector< std::uint8_t > & data,
const PacketContext & context )
inline

Process a received packet.

Parameters
dataRaw packet data
contextPacket context information
Returns
Processing result

Definition at line 350 of file HandlerPacket.hpp.

References rnp::CONNECT, rnp::CONNECT_ACCEPT, connectAcceptHandler_, connectHandler_, rnp::Serializer::deserializeConnect(), rnp::Serializer::deserializeConnectAccept(), rnp::Serializer::deserializeDisconnect(), rnp::Serializer::deserializeError(), rnp::Serializer::deserializeGameStart(), rnp::Serializer::deserializeHeader(), rnp::Serializer::deserializeLobbyCreate(), rnp::Serializer::deserializeLobbyCreateResponse(), rnp::Serializer::deserializeLobbyJoin(), rnp::Serializer::deserializeLobbyJoinResponse(), rnp::Serializer::deserializeLobbyListResponse(), rnp::Serializer::deserializeLobbyUpdate(), rnp::Serializer::deserializePingPong(), rnp::Serializer::deserializeStartGameRequest(), rnp::Serializer::deserializeWorldState(), rnp::DISCONNECT, disconnectHandler_, rnp::ENTITY_EVENT, entityEventHandler_, errorHandler_, rnp::GAME_START, gameStartHandler_, rnp::INVALID_PACKET, isRateLimited(), rnp::PacketHeader::length, rnp::LOBBY_CREATE, rnp::LOBBY_CREATE_RESPONSE, rnp::LOBBY_JOIN, rnp::LOBBY_JOIN_RESPONSE, rnp::LOBBY_LEAVE, rnp::LOBBY_LIST_REQUEST, rnp::LOBBY_LIST_RESPONSE, rnp::LOBBY_UPDATE, lobbyCreateHandler_, lobbyCreateResponseHandler_, lobbyJoinHandler_, lobbyJoinResponseHandler_, lobbyLeaveHandler_, lobbyListRequestHandler_, lobbyListResponseHandler_, lobbyUpdateHandler_, rnp::MAX_PAYLOAD, rnp::PACKET_ERROR, parseEntityEvents(), rnp::PING, pingHandler_, rnp::PONG, pongHandler_, rnp::PROCESSING_ERROR, rnp::RATE_LIMITED, rnp::PacketContext::receiveTime, rnp::PacketContext::sessionId, rnp::PacketHeader::sessionId, rnp::START_GAME_REQUEST, startGameRequestHandler_, rnp::PacketHeader::type, rnp::UNSUPPORTED_TYPE, updateStats(), rnp::WORLD_STATE, and worldStateHandler_.

Referenced by eng::AsioClient::handleReceive(), and srv::AsioServer::handleReceive().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ resetStats()

void rnp::HandlerPacket::resetStats ( )
inline

Reset statistics.

Definition at line 550 of file HandlerPacket.hpp.

References stats_.

◆ setRateLimitInterval()

void rnp::HandlerPacket::setRateLimitInterval ( std::chrono::milliseconds interval)
inline

Set rate limiting interval.

Parameters
intervalMinimum time between packets per session

Definition at line 225 of file HandlerPacket.hpp.

References rateLimitInterval_.

◆ updateStats()

void rnp::HandlerPacket::updateStats ( PacketType packetType,
HandlerResult result,
std::size_t bytesReceived )
inlineprivate

Update statistics.

Parameters
packetTypeType of packet processed
resultProcessing result
bytesReceivedNumber of bytes in the packet

Definition at line 156 of file HandlerPacket.hpp.

References rnp::HandlerStats::packetTypeCount, rnp::HandlerStats::resultCount, stats_, rnp::SUCCESS, rnp::HandlerStats::totalBytesReceived, rnp::HandlerStats::totalPacketsDropped, rnp::HandlerStats::totalPacketsProcessed, and rnp::HandlerStats::totalPacketsReceived.

Referenced by processPacket().

+ Here is the caller graph for this function:

Member Data Documentation

◆ ackHandler_

AckHandler rnp::HandlerPacket::ackHandler_
private

Definition at line 104 of file HandlerPacket.hpp.

◆ connectAcceptHandler_

ConnectAcceptHandler rnp::HandlerPacket::connectAcceptHandler_
private

Definition at line 97 of file HandlerPacket.hpp.

Referenced by onConnectAccept(), and processPacket().

◆ connectHandler_

ConnectHandler rnp::HandlerPacket::connectHandler_
private

Definition at line 96 of file HandlerPacket.hpp.

Referenced by onConnect(), and processPacket().

◆ disconnectHandler_

DisconnectHandler rnp::HandlerPacket::disconnectHandler_
private

Definition at line 98 of file HandlerPacket.hpp.

Referenced by onDisconnect(), and processPacket().

◆ entityEventHandler_

EntityEventHandler rnp::HandlerPacket::entityEventHandler_
private

Definition at line 103 of file HandlerPacket.hpp.

Referenced by onEntityEvent(), and processPacket().

◆ errorHandler_

ErrorHandler rnp::HandlerPacket::errorHandler_
private

Definition at line 102 of file HandlerPacket.hpp.

Referenced by onError(), and processPacket().

◆ gameStartHandler_

GameStartHandler rnp::HandlerPacket::gameStartHandler_
private

Definition at line 115 of file HandlerPacket.hpp.

Referenced by onGameStart(), and processPacket().

◆ lastPacketTime_

std::unordered_map<std::uint32_t, std::chrono::steady_clock::time_point> rnp::HandlerPacket::lastPacketTime_
private

Definition at line 122 of file HandlerPacket.hpp.

Referenced by clearAllSessions(), clearSession(), and isRateLimited().

◆ lobbyCreateHandler_

LobbyCreateHandler rnp::HandlerPacket::lobbyCreateHandler_
private

Definition at line 109 of file HandlerPacket.hpp.

Referenced by onLobbyCreate(), and processPacket().

◆ lobbyCreateResponseHandler_

LobbyCreateResponseHandler rnp::HandlerPacket::lobbyCreateResponseHandler_
private

Definition at line 110 of file HandlerPacket.hpp.

Referenced by onLobbyCreateResponse(), and processPacket().

◆ lobbyJoinHandler_

LobbyJoinHandler rnp::HandlerPacket::lobbyJoinHandler_
private

Definition at line 111 of file HandlerPacket.hpp.

Referenced by onLobbyJoin(), and processPacket().

◆ lobbyJoinResponseHandler_

LobbyJoinResponseHandler rnp::HandlerPacket::lobbyJoinResponseHandler_
private

Definition at line 112 of file HandlerPacket.hpp.

Referenced by onLobbyJoinResponse(), and processPacket().

◆ lobbyLeaveHandler_

LobbyLeaveHandler rnp::HandlerPacket::lobbyLeaveHandler_
private

Definition at line 113 of file HandlerPacket.hpp.

Referenced by onLobbyLeave(), and processPacket().

◆ lobbyListRequestHandler_

LobbyListRequestHandler rnp::HandlerPacket::lobbyListRequestHandler_
private

Definition at line 107 of file HandlerPacket.hpp.

Referenced by onLobbyListRequest(), and processPacket().

◆ lobbyListResponseHandler_

LobbyListResponseHandler rnp::HandlerPacket::lobbyListResponseHandler_
private

Definition at line 108 of file HandlerPacket.hpp.

Referenced by onLobbyListResponse(), and processPacket().

◆ lobbyUpdateHandler_

LobbyUpdateHandler rnp::HandlerPacket::lobbyUpdateHandler_
private

Definition at line 114 of file HandlerPacket.hpp.

Referenced by onLobbyUpdate(), and processPacket().

◆ pingHandler_

PingHandler rnp::HandlerPacket::pingHandler_
private

Definition at line 100 of file HandlerPacket.hpp.

Referenced by onPing(), and processPacket().

◆ pongHandler_

PongHandler rnp::HandlerPacket::pongHandler_
private

Definition at line 101 of file HandlerPacket.hpp.

Referenced by onPong(), and processPacket().

◆ rateLimitInterval_

std::chrono::milliseconds rnp::HandlerPacket::rateLimitInterval_ {10}
private

Definition at line 123 of file HandlerPacket.hpp.

Referenced by isRateLimited(), and setRateLimitInterval().

◆ startGameRequestHandler_

StartGameRequestHandler rnp::HandlerPacket::startGameRequestHandler_
private

Definition at line 116 of file HandlerPacket.hpp.

Referenced by onStartGameRequest(), and processPacket().

◆ stats_

HandlerStats rnp::HandlerPacket::stats_
private

Definition at line 119 of file HandlerPacket.hpp.

Referenced by getStats(), resetStats(), and updateStats().

◆ worldStateHandler_

WorldStateHandler rnp::HandlerPacket::worldStateHandler_
private

Definition at line 99 of file HandlerPacket.hpp.

Referenced by onWorldState(), and processPacket().


The documentation for this class was generated from the following file: