Capycore Engine  0.1.0
A simple and lightweight game engine written in C++ based on the Unity API architecture.
Loading...
Searching...
No Matches
network_message.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <cstring>
5#include <vector>
6
23
30enum class CustomMessageTypes : uint16_t;
31
41 enum class Kind : uint8_t { Default, Custom };
42
44 uint16_t value;
45
46 MessageType() = default;
47
49 : kind{Kind::Default}, value{static_cast<uint16_t>(t)} {}
50
51 MessageType(CustomMessageTypes t)
52 : kind{Kind::Custom}, value{static_cast<uint16_t>(t)} {}
53
54 MessageType(Kind kind, uint16_t t) : kind{kind}, value{t} {}
55
61 static uint16_t to_raw(const MessageType& type) {
62 return (type.kind == MessageType::Kind::Custom ? 0x8000 : 0x0000) |
63 (type.value & 0x7FFF);
64 }
65
72 static MessageType from_raw(uint16_t raw) {
73 bool isCustom = raw & 0x8000;
74 uint16_t value = raw & 0x7FFF;
75
77 value};
78 }
79
83 bool operator<(const MessageType& other) const {
84 if (kind != other.kind) return kind < other.kind;
85 return value < other.value;
86 }
87};
88
95 uint32_t size;
96};
97
105struct Message {
107 std::vector<uint8_t> payload;
108};
109
111 char uuid[37];
112};
113
115 char uuid[37];
116};
117
126template <typename T>
128 Message msg;
129 msg.header.type = type;
130 msg.header.size = sizeof(T);
131 msg.payload.resize(sizeof(T));
132 std::memcpy(msg.payload.data(), &data, sizeof(T));
133 return msg;
134}
135
143template <typename T>
144T deserialize_message(const Message& message) {
145 T data;
146 std::memcpy(&data, message.payload.data(), sizeof(T));
147 return data;
148}
Definition uuid.h:4
Message serialize_message(const T &data, MessageType type)
Serializes a plain-old-data structure into a Message.
Definition network_message.h:127
DefaultMessageTypes
Built-in protocol message types used for core connection events.
Definition network_message.h:14
T deserialize_message(const Message &message)
Deserializes a Message payload into a POD structure.
Definition network_message.h:144
Metadata describing the type and payload size of a message.
Definition network_message.h:93
MessageType type
Definition network_message.h:94
uint32_t size
Definition network_message.h:95
Represents a complete network message including type and payload.
Definition network_message.h:105
MessageHeader header
Definition network_message.h:106
std::vector< uint8_t > payload
Definition network_message.h:107
Represents either a default or custom message identifier.
Definition network_message.h:40
static MessageType from_raw(uint16_t raw)
Restores a MessageType from a raw 16-bit value.
Definition network_message.h:72
uint16_t value
Definition network_message.h:44
MessageType(DefaultMessageTypes t)
Definition network_message.h:48
Kind
Definition network_message.h:41
static uint16_t to_raw(const MessageType &type)
Packs a MessageType into a 16-bit integer.
Definition network_message.h:61
MessageType()=default
MessageType(Kind kind, uint16_t t)
Definition network_message.h:54
Kind kind
Definition network_message.h:43
bool operator<(const MessageType &other) const
Strict ordering operator for use in associative containers.
Definition network_message.h:83
MessageType(CustomMessageTypes t)
Definition network_message.h:51
Definition network_message.h:110
Definition network_message.h:114