allow QByteArray data to be sent with a length. Use appendRawData in places that used to append raw byte-arrays

This commit is contained in:
Seth Alves 2015-05-26 13:43:22 -07:00
parent 988ecf9d55
commit 1ec384ab4d
4 changed files with 23 additions and 11 deletions

View file

@ -183,9 +183,9 @@ OctreeElement::AppendState EntityItem::appendEntityData(OctreePacketData* packet
QByteArray encodedPropertyFlags; QByteArray encodedPropertyFlags;
int propertyCount = 0; int propertyCount = 0;
successIDFits = packetData->appendValue(encodedID); successIDFits = packetData->appendRawData(encodedID);
if (successIDFits) { if (successIDFits) {
successTypeFits = packetData->appendValue(encodedType); successTypeFits = packetData->appendRawData(encodedType);
} }
if (successTypeFits) { if (successTypeFits) {
successCreatedFits = packetData->appendValue(_created); successCreatedFits = packetData->appendValue(_created);
@ -194,17 +194,17 @@ OctreeElement::AppendState EntityItem::appendEntityData(OctreePacketData* packet
successLastEditedFits = packetData->appendValue(lastEdited); successLastEditedFits = packetData->appendValue(lastEdited);
} }
if (successLastEditedFits) { if (successLastEditedFits) {
successLastUpdatedFits = packetData->appendValue(encodedUpdateDelta); successLastUpdatedFits = packetData->appendRawData(encodedUpdateDelta);
} }
if (successLastUpdatedFits) { if (successLastUpdatedFits) {
successLastSimulatedFits = packetData->appendValue(encodedSimulatedDelta); successLastSimulatedFits = packetData->appendRawData(encodedSimulatedDelta);
} }
if (successLastSimulatedFits) { if (successLastSimulatedFits) {
propertyFlagsOffset = packetData->getUncompressedByteOffset(); propertyFlagsOffset = packetData->getUncompressedByteOffset();
encodedPropertyFlags = propertyFlags; encodedPropertyFlags = propertyFlags;
oldPropertyFlagsLength = encodedPropertyFlags.length(); oldPropertyFlagsLength = encodedPropertyFlags.length();
successPropertyFlagsFits = packetData->appendValue(encodedPropertyFlags); successPropertyFlagsFits = packetData->appendRawData(encodedPropertyFlags);
} }
bool headerFits = successIDFits && successTypeFits && successCreatedFits && successLastEditedFits bool headerFits = successIDFits && successTypeFits && successCreatedFits && successLastEditedFits

View file

@ -623,23 +623,23 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem
quint64 lastEdited = properties.getLastEdited(); quint64 lastEdited = properties.getLastEdited();
bool successLastEditedFits = packetData->appendValue(lastEdited); bool successLastEditedFits = packetData->appendValue(lastEdited);
bool successIDFits = packetData->appendValue(encodedID); bool successIDFits = packetData->appendRawData(encodedID);
if (successIDFits) { if (successIDFits) {
successIDFits = packetData->appendValue(encodedToken); successIDFits = packetData->appendRawData(encodedToken);
} }
bool successTypeFits = packetData->appendValue(encodedType); bool successTypeFits = packetData->appendRawData(encodedType);
// NOTE: We intentionally do not send "created" times in edit messages. This is because: // NOTE: We intentionally do not send "created" times in edit messages. This is because:
// 1) if the edit is to an existing entity, the created time can not be changed // 1) if the edit is to an existing entity, the created time can not be changed
// 2) if the edit is to a new entity, the created time is the last edited time // 2) if the edit is to a new entity, the created time is the last edited time
// TODO: Should we get rid of this in this in edit packets, since this has to always be 0? // TODO: Should we get rid of this in this in edit packets, since this has to always be 0?
bool successLastUpdatedFits = packetData->appendValue(encodedUpdateDelta); bool successLastUpdatedFits = packetData->appendRawData(encodedUpdateDelta);
int propertyFlagsOffset = packetData->getUncompressedByteOffset(); int propertyFlagsOffset = packetData->getUncompressedByteOffset();
QByteArray encodedPropertyFlags = propertyFlags; QByteArray encodedPropertyFlags = propertyFlags;
int oldPropertyFlagsLength = encodedPropertyFlags.length(); int oldPropertyFlagsLength = encodedPropertyFlags.length();
bool successPropertyFlagsFits = packetData->appendValue(encodedPropertyFlags); bool successPropertyFlagsFits = packetData->appendRawData(encodedPropertyFlags);
int propertyCount = 0; int propertyCount = 0;
bool headerFits = successIDFits && successTypeFits && successLastEditedFits bool headerFits = successIDFits && successTypeFits && successLastEditedFits

View file

@ -426,7 +426,12 @@ bool OctreePacketData::appendValue(const QUuid& uuid) {
} }
bool OctreePacketData::appendValue(const QByteArray& bytes) { bool OctreePacketData::appendValue(const QByteArray& bytes) {
bool success = appendRawData((const unsigned char*)bytes.constData(), bytes.size()); // TODO: make this a ByteCountCoded leading byte
uint16_t length = bytes.size();
bool success = appendValue(length);
if (success) {
success = appendRawData((const unsigned char*)bytes.constData(), bytes.size());
}
return success; return success;
} }
@ -451,6 +456,12 @@ bool OctreePacketData::appendRawData(const unsigned char* data, int length) {
return success; return success;
} }
bool OctreePacketData::appendRawData(QByteArray data) {
return appendRawData((unsigned char *)data.data(), data.size());
}
quint64 OctreePacketData::_compressContentTime = 0; quint64 OctreePacketData::_compressContentTime = 0;
quint64 OctreePacketData::_compressContentCalls = 0; quint64 OctreePacketData::_compressContentCalls = 0;

View file

@ -183,6 +183,7 @@ public:
/// appends raw bytes, might fail if byte would cause packet to be too large /// appends raw bytes, might fail if byte would cause packet to be too large
bool appendRawData(const unsigned char* data, int length); bool appendRawData(const unsigned char* data, int length);
bool appendRawData(QByteArray data);
/// returns a byte offset from beginning of the uncompressed stream based on offset from end. /// returns a byte offset from beginning of the uncompressed stream based on offset from end.
/// Positive offsetFromEnd returns that many bytes before the end of uncompressed stream /// Positive offsetFromEnd returns that many bytes before the end of uncompressed stream