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;
|
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;
|
if (bytes > 0) this->pos += bytes;
|
||||||
return 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 */
|
#endif /* NETWORK_CORE_PACKET_H */
|
||||||
|
Reference in New Issue
Block a user