R-Type
Distributed multiplayer game engine in C++
Loading...
Searching...
No Matches
GameOver.hpp
Go to the documentation of this file.
1/*
2** EPITECH PROJECT, 2025
3** Created on 09/12/2025.
4** File description:
5** GameOver.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/s2c_messages.capnp.h"
16
17namespace RType::Messages::S2C {
18
25 class GameOver {
26 public:
27 std::string reason;
28
29 GameOver() = default;
30 explicit GameOver(const std::string &r) : reason(r) {}
31
32 [[nodiscard]] std::vector<uint8_t> serialize() const {
33 capnp::MallocMessageBuilder message;
34 auto builder = message.initRoot<::GameOver>();
35 builder.setReason(reason);
36
37 auto bytes = capnp::messageToFlatArray(message);
38 auto byteArray = bytes.asBytes();
39 return std::vector<uint8_t>(byteArray.begin(), byteArray.end());
40 }
41
42 static GameOver deserialize(const std::vector<uint8_t> &data) {
43 // Ensure buffer is word-aligned for Cap'n Proto (undefined behavior if not)
44 KJ_REQUIRE(data.size() % sizeof(capnp::word) == 0,
45 "Serialized data size must be a multiple of capnp::word");
46 auto aligned = kj::heapArray<uint8_t>(data.size());
47 memcpy(aligned.begin(), data.data(), data.size());
48 kj::ArrayPtr<const capnp::word> words(reinterpret_cast<const capnp::word *>(aligned.begin()),
49 data.size() / sizeof(capnp::word));
50
51 capnp::FlatArrayMessageReader message(words);
52 auto reader = message.getRoot<::GameOver>();
53
54 return GameOver(reader.getReason().cStr());
55 }
56 };
57
58} // namespace RType::Messages::S2C
Game over notification.
Definition GameOver.hpp:25
static GameOver deserialize(const std::vector< uint8_t > &data)
Definition GameOver.hpp:42
GameOver(const std::string &r)
Definition GameOver.hpp:30
std::vector< uint8_t > serialize() const
Definition GameOver.hpp:32
Server-to-Client messages.
Definition Server.hpp:34