#pragma once #include #include #include #include #include #include "dvlnet/packet.h" namespace devilution { namespace net { typedef std::vector buffer_t; typedef uint32_t framesize_t; class frame_queue { public: constexpr static framesize_t frame_size_mask = 0xFFFF; constexpr static framesize_t max_frame_size = 0xFFFF; private: framesize_t current_size = 0; std::deque buffer_deque; framesize_t nextsize = 0; framesize_t Size() const; tl::expected Read(framesize_t s); public: tl::expected PacketReady(); uint16_t ReadPacketFlags(); tl::expected ReadPacket(); void Write(buffer_t buf); static tl::expected MakeFrame(buffer_t packetbuf, uint16_t flags = 0); }; } // namespace net } // namespace devilution