R-Type
Distributed multiplayer game engine in C++
Loading...
Searching...
No Matches
JoinGame.hpp
Go to the documentation of this file.
1/*
2** EPITECH PROJECT, 2025
3** Created on 09/12/2025.
4** File description:
5** JoinGame.hpp
6*/
7
8#pragma once
9
10#include <capnp/message.h>
11#include <capnp/serialize.h>
12#include <cstdint>
13#include <string>
14#include <vector>
15#include "schemas/c2s_messages.capnp.h"
16
17namespace RType::Messages::C2S {
18
27 class JoinGame {
28 public:
29 std::string playerName;
30
31 JoinGame() = default;
32 explicit JoinGame(const std::string &name) : playerName(name) {}
33
34 [[nodiscard]] std::vector<uint8_t> serialize() const {
35 capnp::MallocMessageBuilder message;
36 auto builder = message.initRoot<::JoinGame>();
37 builder.setPlayerName(playerName);
38
39 auto bytes = capnp::messageToFlatArray(message);
40 auto byteArray = bytes.asBytes();
41 return std::vector<uint8_t>(byteArray.begin(), byteArray.end());
42 }
43
44 static JoinGame deserialize(const std::vector<uint8_t> &data) {
45 // Ensure buffer is word-aligned for Cap'n Proto (undefined behavior if not)
46 KJ_REQUIRE(data.size() % sizeof(capnp::word) == 0,
47 "Serialized data size must be a multiple of capnp::word");
48 auto aligned = kj::heapArray<uint8_t>(data.size());
49 memcpy(aligned.begin(), data.data(), data.size());
50 kj::ArrayPtr<const capnp::word> words(reinterpret_cast<const capnp::word *>(aligned.begin()),
51 data.size() / sizeof(capnp::word));
52
53 capnp::FlatArrayMessageReader message(words);
54 auto reader = message.getRoot<::JoinGame>();
55
56 return JoinGame(reader.getPlayerName().cStr());
57 }
58 };
59
60} // namespace RType::Messages::C2S
Join game request sent from client to server.
Definition JoinGame.hpp:27
JoinGame(const std::string &name)
Definition JoinGame.hpp:32
static JoinGame deserialize(const std::vector< uint8_t > &data)
Definition JoinGame.hpp:44
std::vector< uint8_t > serialize() const
Definition JoinGame.hpp:34
Client-to-Server messages.