diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 06aa5cd36d..c41b90cf29 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2660,9 +2660,7 @@ int Application::sendNackPackets() { return 0; } - int packetsSent = 0; - - auto nackPacket { NLPacket::create(PacketType::OctreeDataNack); } + PacketList nackPacketList = PacketList(PacketType::OctreeDataNack); // iterates thru all nodes in NodeList auto nodeList = DependencyManager::get(); @@ -2696,34 +2694,23 @@ int Application::sendNackPackets() { // construct nack packet(s) for this node int numSequenceNumbersAvailable = missingSequenceNumbers.size(); - QSet::const_iterator missingSequenceNumbersIterator = missingSequenceNumbers.constBegin(); - while (numSequenceNumbersAvailable > 0) { - // reset the position we are writing at and the size we have used - nackPacket->seek(0); - nackPacket->setSizeUsed(0); - - // calculate and pack the number of sequence numbers - int numSequenceNumbersRoomFor = (nackPacket->size() - sizeof(uint16_t)) / sizeof(OCTREE_PACKET_SEQUENCE); - uint16_t numSequenceNumbers = min(numSequenceNumbersAvailable, numSequenceNumbersRoomFor); - - nackPacket->write(&numSequenceNumbers, sizeof(numSequenceNumbers)); - - // pack sequence numbers - for (int i = 0; i < numSequenceNumbers; i++) { - OCTREE_PACKET_SEQUENCE missingNumber = *missingSequenceNumbersIterator; - nackPacket->write(&missingNumber, sizeof(OCTREE_PACKET_SEQUENCE)); - missingSequenceNumbersIterator++; - } - numSequenceNumbersAvailable -= numSequenceNumbers; - - // send the packet - nodeList->sendUnreliablePacket(packet, node); - packetsSent++; + auto it = missingSequenceNumbers.constBegin(); + while (it != missingSequenceNumbers.constEnd()) { + OCTREE_PACKET_SEQUENCE missingNumber = *it; + nackPacketList->write(&missingNumber, sizeof(OCTREE_PACKET_SEQUENCE)); + ++it; } } }); + int packetsSent = nackPacketList.getNumPackets(); + + if (packetsSent) { + // send the packet list + nodeList->sendPacketList(nackPacketList, node); + } + return packetsSent; } diff --git a/libraries/networking/src/PacketHeaders.cpp b/libraries/networking/src/PacketHeaders.cpp index 396ca63d71..cab062165f 100644 --- a/libraries/networking/src/PacketHeaders.cpp +++ b/libraries/networking/src/PacketHeaders.cpp @@ -89,6 +89,8 @@ PacketVersion versionForPacketType(PacketType::Value packetType) { return 2; case OctreeStats: return 1; + case OctreeDataNack: + return 1; case StopNode: return 1; case EntityAdd: