Bomberman Multiplayer
Authoritative multiplayer networking layer for Bomberman.
Loading...
Searching...
No Matches
PacketDispatch.h
Go to the documentation of this file.
1#ifndef BOMBERMAN_NET_PACKETDISPATCH_H
2#define BOMBERMAN_NET_PACKETDISPATCH_H
3
4#include <array>
5#include <cstddef>
6
7#include "NetCommon.h"
8
14namespace bomberman::net
15{
31 [[nodiscard]]
32 inline bool tryParsePacket(const uint8_t* data,
33 std::size_t dataLength,
34 PacketHeader& outHeader,
35 const uint8_t*& outPayload,
36 std::size_t& outPayloadSize)
37 {
38 if (!deserializeHeader(data, dataLength, outHeader))
39 return false;
40
41 outPayload = data + kPacketHeaderSize;
42 outPayloadSize = outHeader.payloadSize;
43 return true;
44 }
45
54 template<typename TContext>
55 using PacketHandlerFn = void(*)(TContext& context, const PacketHeader& header, const uint8_t* payload, std::size_t payloadSize);
56
63 template<typename TContext>
65 {
66 static constexpr std::size_t kTableSize = 256;
67 std::array<PacketHandlerFn<TContext>, kTableSize> table{};
68
71 {
72 table[static_cast<uint8_t>(type)] = fn;
73 }
74
79 bool dispatch(TContext& context, const PacketHeader& header, const uint8_t* payload, std::size_t payloadSize) const
80 {
81 const auto handler = table[static_cast<uint8_t>(header.type)];
82 if (!handler) return false;
83
84 handler(context, header, payload, payloadSize);
85 return true;
86 }
87 };
88
89} // namespace bomberman::net
90
91#endif // BOMBERMAN_NET_PACKETDISPATCH_H
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
Packet metadata prefix present on every wire message.
Definition NetCommon.h:492
EMsgType type
Message type identifier.
Definition NetCommon.h:493
uint16_t payloadSize
Payload size in bytes, excluding header.
Definition NetCommon.h:494