VOX
A little voxel engine
|
an abstract class that servers as a base for all network packets More...
#include <IPacket.hpp>
Public Types | |
enum class | Type : uint32_t { CONNECTION , PLAYER_CONNECTED , PLAYER_MOVE , DISCONNECT , BLOCK_ACTION , PING , PLAYER_LIST , CHUNK , CHUNK_REQUEST , CHUNK_UNLOAD , LOAD_DISTANCE , ENUM_MAX , ENUM_MIN = 0 } |
Public Member Functions | |
virtual | ~IPacket () |
IPacket (const IPacket &) | |
IPacket & | operator= (const IPacket &) |
IPacket (IPacket &&) | |
IPacket & | operator= (IPacket &&) |
virtual void | Serialize (uint8_t *buffer) const =0 |
will write the packet in the buffer, the buffer must at least be of size Size() More... | |
void | ExtractMessage (Connection &connection) |
Extracts the implemented packet from the connection. More... | |
virtual uint32_t | Size () const =0 |
return the size of the packet in bytes, usually used to reserve the right amount of memory in the send buffer More... | |
virtual bool | HasDynamicSize () const =0 |
Tell if the packet has a dynamic size. More... | |
virtual enum Type | GetType () const =0 |
Get the Type of the packet. More... | |
virtual std::shared_ptr< IPacket > | Clone () const =0 |
Create a new instance of the packet. More... | |
uint64_t | GetConnectionId () const |
Get the Connection Id ( eg source of the packet or destination if it's a response) More... | |
void | SetConnectionId (uint64_t connection_id) |
Set the Connection Id ( eg source of the packet or destination if it's a response) More... | |
Static Public Attributes | |
static const uint32_t | STATIC_HEADER_SIZE = sizeof(Type) |
static const uint32_t | DYNAMIC_HEADER_SIZE = sizeof(Type) + sizeof(size_t) |
Protected Member Functions | |
virtual void | Deserialize (const uint8_t *buffer)=0 |
read the packet from the buffer, the buffer must at least be of size Size() More... | |
size_t | SerializeHeader (uint8_t *buffer) const |
util function to serialize the header of the packet will serialize the type and the size of the packet if it has a dynamic size More... | |
IPacket () | |
Protected Attributes | |
uint64_t | m_connection_id = 0 |
an abstract class that servers as a base for all network packets
This class is used to define the interface of a packet, It has an enum for packet types, pure virtual methods to serialize and deserialize the packet, pure virtual methods to return the size of the packet and if that packet has a dynamic size
#Packet header A typical packet header in memory would look like this
[Type][Size ( if dynamic size)]
a whole packet in memory would look like this
[Header][Data]
The size returned by the Size() method is the size of the whole packet including the header
Some packet have dynamic size, for example a packet that contains a list of players, the size of the packet will depend on the number of players connected this add some obligations to the implementation and manipulation of the packet
|
strong |
|
virtual |
IPacket::IPacket | ( | const IPacket & | other | ) |
IPacket::IPacket | ( | IPacket && | other | ) |
|
protected |
|
pure virtual |
Create a new instance of the packet.
Implemented in BlockActionPacket, ChunkPacket, ChunkRequestPacket, ChunkUnloadPacket, ConnectionPacket, DisconnectPacket, LoadDistancePacket, PingPacket, PlayerConnectedPacket, PlayerListPacket, and PlayerMovePacket.
|
protectedpure virtual |
read the packet from the buffer, the buffer must at least be of size Size()
buffer |
Implemented in BlockActionPacket, ChunkPacket, ChunkRequestPacket, ChunkUnloadPacket, ConnectionPacket, DisconnectPacket, LoadDistancePacket, PingPacket, PlayerConnectedPacket, PlayerListPacket, and PlayerMovePacket.
void IPacket::ExtractMessage | ( | Connection & | connection | ) |
Extracts the implemented packet from the connection.
moreover, the connection's read Mutex MUST be locked by the caller
connection |
|
inline |
Get the Connection Id ( eg source of the packet or destination if it's a response)
|
pure virtual |
Get the Type of the packet.
Implemented in BlockActionPacket, ChunkPacket, ChunkRequestPacket, ChunkUnloadPacket, ConnectionPacket, DisconnectPacket, LoadDistancePacket, PingPacket, PlayerConnectedPacket, PlayerListPacket, and PlayerMovePacket.
|
pure virtual |
Tell if the packet has a dynamic size.
Implemented in BlockActionPacket, ChunkPacket, ChunkRequestPacket, ChunkUnloadPacket, ConnectionPacket, DisconnectPacket, LoadDistancePacket, PingPacket, PlayerConnectedPacket, PlayerListPacket, and PlayerMovePacket.
|
pure virtual |
will write the packet in the buffer, the buffer must at least be of size Size()
buffer |
Implemented in BlockActionPacket, ChunkPacket, ChunkRequestPacket, ChunkUnloadPacket, ConnectionPacket, DisconnectPacket, LoadDistancePacket, PingPacket, PlayerConnectedPacket, PlayerListPacket, and PlayerMovePacket.
|
protected |
util function to serialize the header of the packet will serialize the type and the size of the packet if it has a dynamic size
buffer |
|
inline |
Set the Connection Id ( eg source of the packet or destination if it's a response)
connection_id |
|
pure virtual |
return the size of the packet in bytes, usually used to reserve the right amount of memory in the send buffer
or to check if a connection contains a complete packet
However you can still use it on an instance of a packet that has some data in it to estimate the size of the packet
Implemented in BlockActionPacket, ChunkPacket, ChunkRequestPacket, ChunkUnloadPacket, ConnectionPacket, DisconnectPacket, LoadDistancePacket, PingPacket, PlayerConnectedPacket, PlayerListPacket, and PlayerMovePacket.
|
inlinestatic |
|
protected |
|
inlinestatic |