33 [[nodiscard]] std::vector<uint8_t>
serialize()
const {
34 capnp::MallocMessageBuilder message;
36 auto roomsBuilder = builder.initRooms(
rooms.size());
38 for (
size_t i = 0; i <
rooms.size(); ++i) {
39 auto roomBuilder = roomsBuilder[i];
40 roomBuilder.setRoomId(
rooms[i].roomId);
41 roomBuilder.setRoomName(
rooms[i].roomName);
42 roomBuilder.setPlayerCount(
rooms[i].playerCount);
43 roomBuilder.setMaxPlayers(
rooms[i].maxPlayers);
44 roomBuilder.setIsPrivate(
rooms[i].isPrivate);
45 roomBuilder.setState(
rooms[i].state);
48 auto bytes = capnp::messageToFlatArray(message);
49 auto byteArray = bytes.asBytes();
50 return std::vector<uint8_t>(byteArray.begin(), byteArray.end());
54 KJ_REQUIRE(data.size() %
sizeof(capnp::word) == 0,
55 "Serialized data size must be a multiple of capnp::word");
56 auto aligned = kj::heapArray<uint8_t>(data.size());
57 memcpy(aligned.begin(), data.data(), data.size());
58 kj::ArrayPtr<const capnp::word> words(
reinterpret_cast<const capnp::word *
>(aligned.begin()),
59 aligned.size() /
sizeof(capnp::word));
61 capnp::FlatArrayMessageReader reader(words);
65 auto roomsList = msg.getRooms();
66 for (
auto room : roomsList) {
68 info.
roomId = room.getRoomId().cStr();
69 info.
roomName = room.getRoomName().cStr();
73 info.
state = room.getState();
74 result.rooms.push_back(info);