54 using Header = FGE_NET_HEADER_TYPE;
55 using Realm = uint8_t;
56 using CountId = uint16_t;
57 constexpr static std::size_t HeaderSize =
sizeof(Header) +
sizeof(Realm) +
sizeof(CountId);
58 constexpr static std::size_t HeaderIdPosition = 0;
59 constexpr static std::size_t RealmPosition =
sizeof(Header);
60 constexpr static std::size_t CountIdPosition =
sizeof(Header) +
sizeof(Realm);
62 inline ProtocolPacket(Header header, Realm realmId, CountId countId);
73 [[nodiscard]]
inline Packet& packet()
noexcept {
return *
this; }
74 [[nodiscard]]
inline Packet const& packet()
const noexcept {
return *
this; }
76 [[nodiscard]]
inline bool haveCorrectHeaderSize()
const;
77 [[nodiscard]]
inline std::optional<Header> retrieveHeader()
const;
78 [[nodiscard]]
inline std::optional<Header> retrieveHeaderId()
const;
79 [[nodiscard]]
inline std::optional<Realm> retrieveRealm()
const;
80 [[nodiscard]]
inline std::optional<CountId> retrieveCountId()
const;
82 inline void setHeader(Header header);
83 inline void setHeaderId(Header headerId);
84 inline void setHeaderFlags(Header headerFlags);
85 inline void addHeaderFlags(Header headerFlags);
86 inline void removeHeaderFlags(Header headerFlags);
87 inline void setRealm(Realm realmId);
88 inline void setCountId(CountId countId);
109 WAITING_NEXT_COUNTID,
123 void push(FluxPacketPtr&& fluxPacket);
124 [[nodiscard]]
static Stats checkStat(FluxPacketPtr
const& fluxPacket,
125 ProtocolPacket::CountId currentCountId,
126 ProtocolPacket::Realm currentRealm);
127 [[nodiscard]]
bool isForced()
const;
128 [[nodiscard]] std::optional<Stats> checkStat(ProtocolPacket::CountId currentCountId,
129 ProtocolPacket::Realm currentRealm)
const;
130 [[nodiscard]] FluxPacketPtr pop();
132 [[nodiscard]]
bool isEmpty()
const;
137 explicit Data(FluxPacketPtr&& fluxPacket);
138 Data(Data
const& r) =
delete;
139 Data(Data&& r)
noexcept;
142 Data& operator=(Data
const& r) =
delete;
143 Data& operator=(Data&& r)
noexcept;
145 [[nodiscard]] Stats checkStat(ProtocolPacket::CountId currentCountId, ProtocolPacket::Realm currentRealm)
const;
147 FluxPacketPtr _fluxPacket;
148 ProtocolPacket::CountId _countId;
149 ProtocolPacket::Realm _realm;
153 [[nodiscard]]
constexpr bool operator()(Data
const& l, Data
const& r)
const
155 if (l._realm == r._realm)
157 return l._countId > r._countId;
159 return l._realm > r._realm;
164 std::priority_queue<Data, std::vector<Data>,
Data::Compare> g_cache;
165 bool g_forceRetrieve{
false};