handle sending of JSONBreakableMarshal data via sendStats

This commit is contained in:
Stephen Birarda 2015-04-29 10:44:17 -07:00
parent 68998f4423
commit c7a7bc1646

View file

@ -68,14 +68,38 @@ NodeList::NodeList(char newOwnerType, unsigned short socketListenPort, unsigned
} }
qint64 NodeList::sendStats(const QJsonObject& statsObject, const HifiSockAddr& destination) { qint64 NodeList::sendStats(const QJsonObject& statsObject, const HifiSockAddr& destination) {
QByteArray statsPacket = byteArrayWithPopulatedHeader(PacketTypeNodeJsonStats); QByteArray statsPacket(MAX_PACKET_SIZE, 0);
QDataStream statsPacketStream(&statsPacket, QIODevice::Append); int numBytesForPacketHeader = populatePacketHeader(statsPacket, PacketTypeNodeJsonStats);
// get a QStringList using JSONBreakableMarshal // get a QStringList using JSONBreakableMarshal
QStringList statsStringList = JSONBreakableMarshal::toStringList(statsObject, ""); QStringList statsStringList = JSONBreakableMarshal::toStringList(statsObject, "");
int numBytesWritten = numBytesForPacketHeader;
// enumerate the resulting strings - pack them and send off packets once we hit MTU size
foreach(const QString& statsItem, statsStringList) { foreach(const QString& statsItem, statsStringList) {
qDebug() << statsItem; QByteArray utf8String = statsItem.toUtf8();
if (numBytesWritten + utf8String.size() > MAX_PACKET_SIZE) {
// send off the current packet since the next string will make us too big
statsPacket.resize(numBytesWritten);
writeUnverifiedDatagram(statsPacket, destination);
// reset the number of bytes written to the size of our packet header
numBytesWritten = numBytesForPacketHeader;
}
// write this string into the stats packet
statsPacket.replace(numBytesWritten, utf8String.size(), utf8String);
// keep track of the number of bytes we have written
numBytesWritten += utf8String.size();
}
if (numBytesWritten > numBytesForPacketHeader) {
// always send the last packet, if it has data
statsPacket.resize(numBytesWritten);
writeUnverifiedDatagram(statsPacket, destination);
} }
// enumerate the resulting strings, breaking them into MTU sized packets // enumerate the resulting strings, breaking them into MTU sized packets