mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01:00
Add read/writeString to PacketList and Packet
This commit is contained in:
parent
7317d3b2ea
commit
19cd352a77
7 changed files with 31 additions and 4 deletions
|
@ -20,6 +20,9 @@
|
|||
using MessageID = uint32_t;
|
||||
using DataOffset = int64_t;
|
||||
|
||||
using AssetPath = QString;
|
||||
using AssetHash = QString;
|
||||
|
||||
const size_t SHA256_HASH_LENGTH = 32;
|
||||
const size_t SHA256_HASH_HEX_LENGTH = 64;
|
||||
const uint64_t MAX_UPLOAD_SIZE = 1000 * 1000 * 1000; // 1GB
|
||||
|
|
|
@ -110,8 +110,8 @@ QByteArray ReceivedMessage::readAll() {
|
|||
QString ReceivedMessage::readString() {
|
||||
uint32_t size;
|
||||
readPrimitive(&size);
|
||||
Q_ASSERT(size <= _size - _position);
|
||||
auto string = QString::fromUtf8(_data.constData(), size);
|
||||
//Q_ASSERT(size <= _size - _position);
|
||||
auto string = QString::fromUtf8(_data.constData() + _position, size);
|
||||
_position += size;
|
||||
return string;
|
||||
}
|
||||
|
|
|
@ -88,7 +88,6 @@ private:
|
|||
QByteArray _data;
|
||||
QByteArray _headData;
|
||||
|
||||
std::atomic<qint64> _size { true };
|
||||
std::atomic<qint64> _position { 0 };
|
||||
std::atomic<qint64> _numPackets { 0 };
|
||||
|
||||
|
|
|
@ -150,6 +150,20 @@ QByteArray BasePacket::readWithoutCopy(qint64 maxSize) {
|
|||
return data;
|
||||
}
|
||||
|
||||
qint64 BasePacket::writeString(const QString& string) {
|
||||
QByteArray data = string.toUtf8();
|
||||
writePrimitive(static_cast<uint32_t>(data.length()));
|
||||
return writeData(data.constData(), data.length());
|
||||
}
|
||||
|
||||
QString BasePacket::readString() {
|
||||
uint32_t size {};
|
||||
readPrimitive(&size);
|
||||
auto string = QString::fromUtf8(getPayload() + pos(), size);
|
||||
seek(pos() + size);
|
||||
return string;
|
||||
}
|
||||
|
||||
bool BasePacket::reset() {
|
||||
if (isWritable()) {
|
||||
_payloadSize = 0;
|
||||
|
|
|
@ -77,7 +77,10 @@ public:
|
|||
using QIODevice::read; // Bring QIODevice::read methods to scope, otherwise they are hidden by folling method
|
||||
QByteArray read(qint64 maxSize);
|
||||
QByteArray readWithoutCopy(qint64 maxSize); // this can only be used if packet will stay in scope
|
||||
|
||||
|
||||
qint64 writeString(const QString& string);
|
||||
QString readString();
|
||||
|
||||
template<typename T> qint64 peekPrimitive(T* data);
|
||||
template<typename T> qint64 readPrimitive(T* data);
|
||||
template<typename T> qint64 writePrimitive(const T& data);
|
||||
|
|
|
@ -158,6 +158,12 @@ void PacketList::preparePackets(MessageNumber messageNumber) {
|
|||
|
||||
const qint64 PACKET_LIST_WRITE_ERROR = -1;
|
||||
|
||||
qint64 PacketList::writeString(const QString& string) {
|
||||
QByteArray data = string.toUtf8();
|
||||
writePrimitive(static_cast<uint32_t>(data.length()));
|
||||
return writeData(data.constData(), data.length());
|
||||
}
|
||||
|
||||
qint64 PacketList::writeData(const char* data, qint64 maxSize) {
|
||||
auto sizeRemaining = maxSize;
|
||||
|
||||
|
|
|
@ -59,6 +59,8 @@ public:
|
|||
|
||||
template<typename T> qint64 readPrimitive(T* data);
|
||||
template<typename T> qint64 writePrimitive(const T& data);
|
||||
|
||||
qint64 writeString(const QString& string);
|
||||
|
||||
protected:
|
||||
PacketList(PacketType packetType, QByteArray extendedHeader = QByteArray(), bool isReliable = false, bool isOrdered = false);
|
||||
|
|
Loading…
Reference in a new issue