Add read/writeString to PacketList and Packet

This commit is contained in:
Ryan Huffman 2016-03-07 13:24:12 -08:00 committed by Stephen Birarda
parent 7317d3b2ea
commit 19cd352a77
7 changed files with 31 additions and 4 deletions

View file

@ -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

View file

@ -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;
}

View file

@ -88,7 +88,6 @@ private:
QByteArray _data;
QByteArray _headData;
std::atomic<qint64> _size { true };
std::atomic<qint64> _position { 0 };
std::atomic<qint64> _numPackets { 0 };

View file

@ -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;

View file

@ -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);

View file

@ -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;

View file

@ -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);