R-Type
Distributed multiplayer game engine in C++
Loading...
Searching...
No Matches
JoinedRoom.hpp
Go to the documentation of this file.
1/*
2** EPITECH PROJECT, 2025
3** File description:
4** JoinedRoom.hpp - Room join response
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/s2c_messages.capnp.h"
14
15namespace RType::Messages::S2C {
16
17 class JoinedRoom {
18 public:
19 std::string roomId;
20 bool success;
21 std::string errorMessage;
22 bool isSpectator{false};
23
24 JoinedRoom() = default;
25 JoinedRoom(const std::string &id, bool succ, const std::string &err = "", bool spectator = false)
26 : roomId(id), success(succ), errorMessage(err), isSpectator(spectator) {}
27
28 [[nodiscard]] std::vector<uint8_t> serialize() const {
29 capnp::MallocMessageBuilder message;
30 auto builder = message.initRoot<::JoinedRoom>();
31 builder.setRoomId(roomId);
32 builder.setSuccess(success);
33 builder.setErrorMessage(errorMessage);
34 builder.setIsSpectator(isSpectator);
35
36 auto bytes = capnp::messageToFlatArray(message);
37 auto byteArray = bytes.asBytes();
38 return std::vector<uint8_t>(byteArray.begin(), byteArray.end());
39 }
40
41 static JoinedRoom deserialize(const std::vector<uint8_t> &data) {
42 KJ_REQUIRE(data.size() % sizeof(capnp::word) == 0,
43 "Serialized data size must be a multiple of capnp::word");
44 auto aligned = kj::heapArray<uint8_t>(data.size());
45 memcpy(aligned.begin(), data.data(), data.size());
46 kj::ArrayPtr<const capnp::word> words(reinterpret_cast<const capnp::word *>(aligned.begin()),
47 aligned.size() / sizeof(capnp::word));
48
49 capnp::FlatArrayMessageReader reader(words);
50 auto msg = reader.getRoot<::JoinedRoom>();
51
52 JoinedRoom result;
53 result.roomId = msg.getRoomId().cStr();
54 result.success = msg.getSuccess();
55 result.errorMessage = msg.getErrorMessage().cStr();
56 result.isSpectator = msg.getIsSpectator();
57 return result;
58 }
59 };
60
61} // namespace RType::Messages::S2C
JoinedRoom(const std::string &id, bool succ, const std::string &err="", bool spectator=false)
static JoinedRoom deserialize(const std::vector< uint8_t > &data)
std::vector< uint8_t > serialize() const
Server-to-Client messages.
Definition Server.hpp:34