R-Type
Distributed multiplayer game engine in C++
Loading...
Searching...
No Matches
JoinRoom.hpp
Go to the documentation of this file.
1/*
2** EPITECH PROJECT, 2025
3** File description:
4** JoinRoom.hpp - Join a specific room
5*/
6
7#pragma once
8
9#include <capnp/message.h>
10#include <capnp/serialize.h>
11#include <string>
12#include <vector>
13#include "schemas/c2s_messages.capnp.h"
14
15namespace RType::Messages::C2S {
16
17 class JoinRoom {
18 public:
19 std::string roomId;
20
21 JoinRoom() = default;
22 explicit JoinRoom(const std::string &id) : roomId(id) {}
23
24 [[nodiscard]] std::vector<uint8_t> serialize() const {
25 capnp::MallocMessageBuilder message;
26 auto builder = message.initRoot<::JoinRoom>();
27 builder.setRoomId(roomId);
28
29 auto bytes = capnp::messageToFlatArray(message);
30 auto byteArray = bytes.asBytes();
31 return std::vector<uint8_t>(byteArray.begin(), byteArray.end());
32 }
33
34 static JoinRoom deserialize(const std::vector<uint8_t> &data) {
35 KJ_REQUIRE(data.size() % sizeof(capnp::word) == 0,
36 "Serialized data size must be a multiple of capnp::word");
37 auto aligned = kj::heapArray<uint8_t>(data.size());
38 memcpy(aligned.begin(), data.data(), data.size());
39 kj::ArrayPtr<const capnp::word> words(reinterpret_cast<const capnp::word *>(aligned.begin()),
40 aligned.size() / sizeof(capnp::word));
41
42 capnp::FlatArrayMessageReader reader(words);
43 auto msg = reader.getRoot<::JoinRoom>();
44
45 return JoinRoom(msg.getRoomId().cStr());
46 }
47 };
48
49} // namespace RType::Messages::C2S
std::vector< uint8_t > serialize() const
Definition JoinRoom.hpp:24
JoinRoom(const std::string &id)
Definition JoinRoom.hpp:22
static JoinRoom deserialize(const std::vector< uint8_t > &data)
Definition JoinRoom.hpp:34
Client-to-Server messages.