From fa318825ef0404816728f733484caa1bc23afa53 Mon Sep 17 00:00:00 2001 From: hovertank3d Date: Fri, 14 Nov 2025 20:05:59 +0100 Subject: george droid --- include/net/packet.hpp | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) (limited to 'include/net/packet.hpp') diff --git a/include/net/packet.hpp b/include/net/packet.hpp index 117fc15..950601e 100644 --- a/include/net/packet.hpp +++ b/include/net/packet.hpp @@ -17,6 +17,7 @@ #include #include "types.hpp" +#include "util/io.hpp" namespace net { @@ -27,28 +28,22 @@ using packet_header = std::tuple; template void decode_packet(std::span payload, T& t) { - std::size_t offset = 0; + std::size_t len = 0; - boost::pfr::for_each_field(t, [&payload, &offset](auto& field, int i) { - if (offset >= payload.size()) { - throw std::runtime_error("Received invalid packet"); - } - offset += decode_field(payload.subspan(offset), field); - }); + auto rd = io::serialized_io(io::buffered_io { payload }); + len = rd.read(t); - if (offset < payload.size()) { - throw std::runtime_error(std::format("{}: {}", offset, payload.size())); + if (len != payload.size()) { + throw std::runtime_error(std::format("{}: {}", len, payload.size())); } } template -std::vector encode_raw_packet(T& t) +std::vector encode_packet_impl(T& t) { std::vector payload; - - boost::pfr::for_each_field(t, [&payload](auto& field) { - encode_field(payload, field); - }); + auto wt = io::serialized_io(io::buffered_io { payload }); + wt.write(t); return payload; } @@ -56,7 +51,7 @@ std::vector encode_raw_packet(T& t) template std::vector encode_packet(T& t) { - return encode_raw_packet(t); + return encode_packet_impl(t); } template @@ -69,7 +64,7 @@ std::vector encode_packet(T& t) int ret, flush; z_stream strm; - auto raw_payload = encode_raw_packet(t); + auto raw_payload = encode_packet_impl(t); strm.zalloc = Z_NULL; strm.zfree = Z_NULL; -- cgit v1.2.3