From 06f8464ec9ac54683cfbe0392ab790526a58ac04 Mon Sep 17 00:00:00 2001 From: wangyix Date: Mon, 16 Jun 2014 17:17:48 -0700 Subject: [PATCH] edit nacks ready for test; seq numbers sometimes repeat?? --- .../src/octree/OctreeInboundPacketProcessor.cpp | 6 +++--- libraries/networking/src/SentPacketHistory.cpp | 6 ++++++ libraries/octree/src/OctreeEditPacketSender.cpp | 17 +++++++++-------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp b/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp index 1902ba28c3..b795139ed5 100644 --- a/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp +++ b/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp @@ -194,8 +194,6 @@ void OctreeInboundPacketProcessor::trackInboundPacket(const QUuid& nodeUUID, uns int OctreeInboundPacketProcessor::sendNackPackets() { - printf("\t\t sendNackPackets()\n"); - int packetsSent = 0; NodeToSenderStatsMapIterator i = _singleSenderStats.begin(); @@ -336,7 +334,9 @@ printf("\t\t tracked seq %d\n", incomingSequence); printf("\t\t\t packet is late!\n"); // remove this from missing sequence number if it's in there - _missingSequenceNumbers.remove(incomingSequence); + if (_missingSequenceNumbers.remove(incomingSequence)) { + printf("\t\t\t\t packet %d recovered!!!\n", incomingSequence); + } // do not update _incomingLastSequence } diff --git a/libraries/networking/src/SentPacketHistory.cpp b/libraries/networking/src/SentPacketHistory.cpp index 37c8953861..eb55d2e1b4 100644 --- a/libraries/networking/src/SentPacketHistory.cpp +++ b/libraries/networking/src/SentPacketHistory.cpp @@ -19,6 +19,12 @@ SentPacketHistory::SentPacketHistory(int size) } void SentPacketHistory::packetSent(uint16_t sequenceNumber, const QByteArray& packet) { + + if (sequenceNumber != 0 && sequenceNumber != _newestSequenceNumber + 1) { + printf("\t packet history received unexpected seq number! prev: %d received: %d\n", _newestSequenceNumber, sequenceNumber); + } + + _newestSequenceNumber = sequenceNumber; // increment _newestPacketAt cyclically, insert new packet there. diff --git a/libraries/octree/src/OctreeEditPacketSender.cpp b/libraries/octree/src/OctreeEditPacketSender.cpp index 16bb22987d..2e0999c4f8 100644 --- a/libraries/octree/src/OctreeEditPacketSender.cpp +++ b/libraries/octree/src/OctreeEditPacketSender.cpp @@ -97,6 +97,9 @@ void OctreeEditPacketSender::queuePacketToNode(const QUuid& nodeUUID, const unsi ((node->getUUID() == nodeUUID) || (nodeUUID.isNull()))) { if (node->getActiveSocket()) { QByteArray packet(reinterpret_cast(buffer), length); + + bool send = randFloat() < 0.7f; + if (send) queuePacketForSending(node, packet); // extract sequence number and add packet to history @@ -105,6 +108,10 @@ void OctreeEditPacketSender::queuePacketToNode(const QUuid& nodeUUID, const unsi unsigned short int sequence = (*((unsigned short int*)(dataAt + numBytesPacketHeader))); _sentPacketHistories[nodeUUID].packetSent(sequence, packet); + if (!send) { + printf("\t\t dropped packet %d !!!\n", sequence); + } + // debugging output... bool wantDebugging = false; if (wantDebugging) { @@ -314,14 +321,7 @@ void OctreeEditPacketSender::initializePacket(EditPacketBuffer& packetBuffer, Pa unsigned short int* sequenceAt = (unsigned short int*)&packetBuffer._currentBuffer[packetBuffer._currentSize]; *sequenceAt = _sequenceNumber; packetBuffer._currentSize += sizeof(unsigned short int); // nudge past sequence - if (randFloat() < 0.6f) _sequenceNumber++; - else - { - int x = randIntInRange(2, 4); - printf("\t\t seq number jumped from %d to %d\n", _sequenceNumber, _sequenceNumber + x); - _sequenceNumber += x; - } // pack in timestamp quint64 now = usecTimestampNow(); @@ -368,7 +368,8 @@ void OctreeEditPacketSender::processNackPacket(const QByteArray& packet) { // retrieve packet from history const QByteArray* packet = sentPacketHistory.getPacket(sequenceNumber); if (packet) { - queuePacketToNode(sendingNodeUUID, (const unsigned char*)packet->constData(), packet->length()); + const SharedNodePointer& node = NodeList::getInstance()->getNodeHash().value(sendingNodeUUID); + queuePacketForSending(node, *packet); } } }