39 ::capnp::MallocMessageBuilder message;
46 builder.setState(
state);
48 auto playersList = builder.initPlayers(
players.size());
49 for (
size_t i = 0; i <
players.size(); ++i) {
50 auto playerBuilder = playersList[i];
51 playerBuilder.setPlayerId(
players[i].playerId);
52 playerBuilder.setPlayerName(
players[i].playerName);
53 playerBuilder.setIsHost(
players[i].isHost);
54 playerBuilder.setIsSpectator(
players[i].isSpectator);
57 kj::VectorOutputStream output;
58 ::capnp::writeMessage(output, message);
59 auto data = output.getArray();
60 return std::vector<uint8_t>(data.begin(), data.end());
65 throw std::runtime_error(
"Cannot deserialize RoomState from empty data");
68 kj::ArrayPtr<const ::capnp::word> words(
reinterpret_cast<const ::capnp::word *
>(data.data()),
69 data.size() /
sizeof(::capnp::word));
71 ::capnp::FlatArrayMessageReader reader(words);
75 result.
roomId = msg.getRoomId().cStr();
76 result.roomName = msg.getRoomName().cStr();
77 result.currentPlayers = msg.getCurrentPlayers();
78 result.maxPlayers = msg.getMaxPlayers();
79 result.state = msg.getState();
81 auto playersList = msg.getPlayers();
82 result.players.reserve(playersList.size());
83 for (
auto playerMsg : playersList) {
85 player.
playerId = playerMsg.getPlayerId();
86 player.
playerName = playerMsg.getPlayerName().cStr();
87 player.
isHost = playerMsg.getIsHost();
89 result.players.push_back(player);