1#ifndef BOMBERMAN_NET_PACKETDISPATCH_H
2#define BOMBERMAN_NET_PACKETDISPATCH_H
33 std::size_t dataLength,
35 const uint8_t*& outPayload,
36 std::size_t& outPayloadSize)
41 outPayload = data + kPacketHeaderSize;
54 template<
typename TContext>
63 template<
typename TContext>
66 static constexpr std::size_t kTableSize = 256;
67 std::array<PacketHandlerFn<TContext>, kTableSize> table{};
72 table[
static_cast<uint8_t
>(type)] = fn;
79 bool dispatch(TContext& context,
const PacketHeader& header,
const uint8_t* payload, std::size_t payloadSize)
const
81 const auto handler = table[
static_cast<uint8_t
>(header.
type)];
82 if (!handler)
return false;
84 handler(context, header, payload, payloadSize);
Shared client/server wire contract for the multiplayer protocol.
Shared multiplayer protocol types and transport-facing wire helpers.
Definition ClientPrediction.cpp:13
bool deserializeHeader(const uint8_t *in, std::size_t inSize, PacketHeader &outHeader)
Deserializes and validates PacketHeader.
Definition NetCommon.h:966
EMsgType
Message type identifiers used in packet headers.
Definition NetCommon.h:316
bool tryParsePacket(const uint8_t *data, std::size_t dataLength, PacketHeader &outHeader, const uint8_t *&outPayload, std::size_t &outPayloadSize)
Validates and parses a raw packet into header and payload view.
Definition PacketDispatch.h:32
void(*)(TContext &context, const PacketHeader &header, const uint8_t *payload, std::size_t payloadSize) PacketHandlerFn
Function signature for a typed message handler.
Definition PacketDispatch.h:55
Fixed-size message type to handler lookup table.
Definition PacketDispatch.h:65
bool dispatch(TContext &context, const PacketHeader &header, const uint8_t *payload, std::size_t payloadSize) const
Looks up and invokes the handler for header.type.
Definition PacketDispatch.h:79
void bind(EMsgType type, PacketHandlerFn< TContext > fn)
Registers a handler for a message type. Overwrites existing binding.
Definition PacketDispatch.h:70