Add a helper for sub-packet deserialisation
This commit is contained in:
@@ -198,3 +198,12 @@ size_t Packet::RemainingBytesToTransfer() const
|
||||
return this->Size() - this->pos;
|
||||
}
|
||||
|
||||
bool SubPacketDeserialiser::CanDeserialiseBytes(size_t bytes_to_read, bool raise_error)
|
||||
{
|
||||
if (this->pos + bytes_to_read > this->size) {
|
||||
if (raise_error) this->cs->NetworkSocketHandler::MarkClosed();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@@ -187,6 +187,23 @@ public:
|
||||
if (bytes > 0) this->pos += bytes;
|
||||
return bytes;
|
||||
}
|
||||
|
||||
NetworkSocketHandler *GetParentSocket() { return this->cs; }
|
||||
};
|
||||
|
||||
struct SubPacketDeserialiser : public BufferDeserialisationHelper<SubPacketDeserialiser> {
|
||||
NetworkSocketHandler *cs;
|
||||
const byte *data;
|
||||
size_t size;
|
||||
PacketSize pos;
|
||||
|
||||
SubPacketDeserialiser(Packet *p, const byte *data, size_t size, PacketSize pos = 0) : cs(p->GetParentSocket()), data(data), size(size), pos(pos) {}
|
||||
SubPacketDeserialiser(Packet *p, const std::vector<byte> &buffer, PacketSize pos = 0) : cs(p->GetParentSocket()), data(buffer.data()), size(buffer.size()), pos(pos) {}
|
||||
|
||||
const byte *GetDeserialisationBuffer() const { return this->data; }
|
||||
size_t GetDeserialisationBufferSize() const { return this->size; }
|
||||
PacketSize &GetDeserialisationPosition() { return this->pos; }
|
||||
bool CanDeserialiseBytes(size_t bytes_to_read, bool raise_error);
|
||||
};
|
||||
|
||||
#endif /* NETWORK_CORE_PACKET_H */
|
||||
|
Reference in New Issue
Block a user