Air-Trap 1.0.0
A multiplayer R-Type clone game engine built with C++23 and ECS architecture
Loading...
Searching...
No Matches
rtp::net::Packet Class Reference

Network packet with header and serializable body. More...

#include <Packet.hpp>

Collaboration diagram for rtp::net::Packet:

Public Member Functions

 Packet ()=default
 Default constructor.
 
 Packet (OpCode op)
 Construct packet with specific operation code.
 
void resetRead (void)
 Reset read position to beginning of body.
 
BufferSequence getBufferSequence (void) const
 Get buffer sequence for network transmission.
 
template<typename T >
auto operator<< (T data) -> Packet &
 Serialize data into packet body.
 
template<typename T >
auto operator<< (const std::vector< T > &vec) -> Packet &
 Serialize vector into packet body.
 
auto operator<< (std::string_view str) -> Packet &
 Serialize string into packet body.
 
template<typename T >
auto operator>> (T &data) -> Packet &
 Deserialize data from packet body.
 
template<typename T >
auto operator>> (std::vector< T > &vec) -> Packet &
 Deserialize vector from packet body.
 
auto operator>> (std::string &str) -> Packet &
 Deserialize string from packet body.
 

Static Public Member Functions

template<typename T >
static T to_network (T v)
 Converts a primitive type (integer, float) from machine endianness to Big-Endian (network).
 
template<typename T >
static T from_network (T value)
 Converts a primitive type (integer, float) from Big-Endian (network) to machine endianness.
 

Public Attributes

Header header
 Packet header.
 
std::vector< uint8_t > body
 Packet body/payload.
 

Private Member Functions

void _bumpBodySizeOrThrow ()
 Increment body size and check for overflow.
 

Private Attributes

size_t _readPos = 0
 Current read position in body.
 
Header _cacheHeader
 Cached header with network endianness.
 

Detailed Description

Network packet with header and serializable body.

Provides serialization and deserialization operators for various data types. Supports automatic endianness handling and buffer management.

Definition at line 471 of file Packet.hpp.

Constructor & Destructor Documentation

◆ Packet() [1/2]

rtp::net::Packet::Packet ( )
default

Default constructor.

◆ Packet() [2/2]

rtp::net::Packet::Packet ( OpCode  op)
explicit

Construct packet with specific operation code.

Parameters
opOperation code for the packet

Definition at line 20 of file Packet.cpp.

References rtp::net::Header::ackId, rtp::net::Header::bodySize, header, rtp::net::Header::magic, rtp::net::MAGIC_NUMBER, rtp::net::Header::opCode, rtp::net::Header::reserved, and rtp::net::Header::sequenceId.

Member Function Documentation

◆ _bumpBodySizeOrThrow()

void rtp::net::Packet::_bumpBodySizeOrThrow ( )
private

Increment body size and check for overflow.

◆ from_network()

template<typename T >
static T rtp::net::Packet::from_network ( value)
inlinestatic

Converts a primitive type (integer, float) from Big-Endian (network) to machine endianness.

Note
Uses std::byteswap for endianness conversion if necessary.
Parameters
valueThe value to convert.
Returns
The value in machine endianness format.

Definition at line 532 of file Packet.hpp.

References to_network().

Referenced by rtp::net::Session::reader(), rtp::client::ClientNetwork::readTcpHeader(), rtp::client::ClientNetwork::readUdp(), and rtp::server::ServerNetwork::receiveUdpPacket().

◆ getBufferSequence()

BufferSequence rtp::net::Packet::getBufferSequence ( void  ) const

Get buffer sequence for network transmission.

Returns
Buffer sequence containing header and body

Definition at line 36 of file Packet.cpp.

References _cacheHeader, rtp::net::Header::ackId, body, rtp::net::Header::bodySize, header, rtp::net::Header::magic, rtp::net::Header::sequenceId, rtp::net::Header::sessionId, and to_network().

Referenced by rtp::client::ClientNetwork::sendPacket(), and rtp::net::Session::writer().

◆ operator<<() [1/3]

template<typename T >
auto rtp::net::Packet::operator<< ( const std::vector< T > &  vec) -> Packet &

Serialize vector into packet body.

Template Parameters
TSerializable type
Parameters
vecVector to serialize
Returns
Reference to this packet for chaining

◆ operator<<() [2/3]

auto rtp::net::Packet::operator<< ( std::string_view  str) -> Packet &

Serialize string into packet body.

Parameters
strString view to serialize
Returns
Reference to this packet for chaining

◆ operator<<() [3/3]

template<typename T >
auto rtp::net::Packet::operator<< ( data) -> Packet &

Serialize data into packet body.

Template Parameters
TSerializable type
Parameters
dataData to serialize
Returns
Reference to this packet for chaining

◆ operator>>() [1/3]

auto rtp::net::Packet::operator>> ( std::string &  str) -> Packet &

Deserialize string from packet body.

Parameters
strReference to store deserialized string
Returns
Reference to this packet for chaining

◆ operator>>() [2/3]

template<typename T >
auto rtp::net::Packet::operator>> ( std::vector< T > &  vec) -> Packet &

Deserialize vector from packet body.

Template Parameters
TSerializable type
Parameters
vecReference to store deserialized vector
Returns
Reference to this packet for chaining

◆ operator>>() [3/3]

template<typename T >
auto rtp::net::Packet::operator>> ( T &  data) -> Packet &

Deserialize data from packet body.

Template Parameters
TSerializable type
Parameters
dataReference to store deserialized data
Returns
Reference to this packet for chaining

◆ resetRead()

void rtp::net::Packet::resetRead ( void  )

Reset read position to beginning of body.

Definition at line 31 of file Packet.cpp.

References _readPos.

◆ to_network()

template<typename T >
static T rtp::net::Packet::to_network ( v)
inlinestatic

Converts a primitive type (integer, float) from machine endianness to Big-Endian (network).

Note
Uses std::byteswap for endianness conversion if necessary.
Parameters
valueThe value to convert.
Returns
The value in network endianness format.

Definition at line 505 of file Packet.hpp.

References rtp::net::NATIVE_ENDIAN, and to_network().

Referenced by from_network(), getBufferSequence(), and to_network().

Member Data Documentation

◆ _cacheHeader

Header rtp::net::Packet::_cacheHeader
mutableprivate

Cached header with network endianness.

Definition at line 591 of file Packet.hpp.

Referenced by getBufferSequence().

◆ _readPos

size_t rtp::net::Packet::_readPos = 0
private

Current read position in body.

Definition at line 589 of file Packet.hpp.

Referenced by resetRead().

◆ body

std::vector<uint8_t> rtp::net::Packet::body

◆ header


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