diff --git a/assignment-client/src/octree/OctreeQueryNode.cpp b/assignment-client/src/octree/OctreeQueryNode.cpp index e0ca6a4f1e..208be5951b 100644 --- a/assignment-client/src/octree/OctreeQueryNode.cpp +++ b/assignment-client/src/octree/OctreeQueryNode.cpp @@ -364,7 +364,7 @@ void OctreeQueryNode::dumpOutOfView() { } } -void OctreeQueryNode::packetSent() { +void OctreeQueryNode::octreePacketSent() { packetSent(_octreePacket, getPacketLength()); } @@ -379,18 +379,18 @@ void OctreeQueryNode::packetSent(const QByteArray& packet) { void OctreeQueryNode::addSequenceNumbersToResend(const QList& sequenceNumbers) { - _sequenceNumbersToResend.append(sequenceNumbers); + _nackedSequenceNumbers.append(sequenceNumbers); } -bool OctreeQueryNode::hasNextPacketToResend() const { - return !_sequenceNumbersToResend.isEmpty(); +bool OctreeQueryNode::hasNextNackedPacket() const { + return !_nackedSequenceNumbers.isEmpty(); } -const QByteArray* OctreeQueryNode::getNextPacketToResend() { +const QByteArray* OctreeQueryNode::getNextNackedPacket() { - if (!_sequenceNumbersToResend.isEmpty()) { - const QByteArray* nextPacket = _sentPacketHistory.getPacket(_sequenceNumbersToResend.first()); - _sequenceNumbersToResend.pop_front(); + if (!_nackedSequenceNumbers.isEmpty()) { + const QByteArray* nextPacket = _sentPacketHistory.getPacket(_nackedSequenceNumbers.first()); + _nackedSequenceNumbers.pop_front(); return nextPacket; // could be null } return NULL; diff --git a/assignment-client/src/octree/OctreeQueryNode.h b/assignment-client/src/octree/OctreeQueryNode.h index 4a2355f7cc..e1707cc899 100644 --- a/assignment-client/src/octree/OctreeQueryNode.h +++ b/assignment-client/src/octree/OctreeQueryNode.h @@ -103,15 +103,15 @@ public: void forceNodeShutdown(); bool isShuttingDown() const { return _isShuttingDown; } - void packetSent(); + void octreePacketSent(); void packetSent(unsigned char* packet, int packetLength); void packetSent(const QByteArray& packet); OCTREE_PACKET_SEQUENCE getSequenceNumber() const { return _sequenceNumber; } void addSequenceNumbersToResend(const QList& sequenceNumbers); - bool hasNextPacketToResend() const; - const QByteArray* getNextPacketToResend(); + bool hasNextNackedPacket() const; + const QByteArray* getNextNackedPacket(); private slots: void sendThreadFinished(); @@ -157,7 +157,7 @@ private: bool _isShuttingDown; SentPacketHistory _sentPacketHistory; -QQueue _sequenceNumbersToResend; +QQueue _nackedSequenceNumbers; }; #endif // hifi_OctreeQueryNode_h diff --git a/assignment-client/src/octree/OctreeSendThread.cpp b/assignment-client/src/octree/OctreeSendThread.cpp index 5767f2623b..befea80380 100644 --- a/assignment-client/src/octree/OctreeSendThread.cpp +++ b/assignment-client/src/octree/OctreeSendThread.cpp @@ -85,6 +85,7 @@ bool OctreeSendThread::process() { if (nodeData && !nodeData->isShuttingDown()) { bool viewFrustumChanged = nodeData->updateCurrentViewFrustum(); packetDistributor(nodeData, viewFrustumChanged); +resendNackedPackets(nodeData); } } } @@ -274,7 +275,7 @@ int OctreeSendThread::handlePacketSend(OctreeQueryNode* nodeData, int& trueBytes trueBytesSent += nodeData->getPacketLength(); truePacketsSent++; packetsSent++; - nodeData->packetSent(); + nodeData->octreePacketSent(); nodeData->resetOctreePacket(); } @@ -287,11 +288,14 @@ int OctreeSendThread::handlePacketSend(OctreeQueryNode* nodeData, int& trueBytes int OctreeSendThread::resendNackedPackets(OctreeQueryNode* nodeData) { + const int maxPacketsSent = 10; + int packetsSent = 0; const QByteArray* packet; - while (nodeData->hasNextPacketToResend()) { - packet = nodeData->getNextPacketToResend(); + while (nodeData->hasNextNackedPacket() && packetsSent < maxPacketsSent) { + packet = nodeData->getNextNackedPacket(); + // packet will be NULL if it's not in nodeData's packet history if (packet) { NodeList::getInstance()->writeDatagram(*packet, _node); packetsSent++; @@ -302,7 +306,9 @@ int OctreeSendThread::resendNackedPackets(OctreeQueryNode* nodeData) { _totalWastedBytes += MAX_PACKET_SIZE - packet->size(); // ??? } } - + +printf("\t\t re-sent %d packets!\n", packetsSent); + return packetsSent; } @@ -310,11 +316,6 @@ int OctreeSendThread::resendNackedPackets(OctreeQueryNode* nodeData) { - - - - - /// Version of voxel distributor that sends the deepest LOD level at once int OctreeSendThread::packetDistributor(OctreeQueryNode* nodeData, bool viewFrustumChanged) { diff --git a/assignment-client/src/octree/OctreeServer.cpp b/assignment-client/src/octree/OctreeServer.cpp index f60f0fc2d5..46eb7aac16 100644 --- a/assignment-client/src/octree/OctreeServer.cpp +++ b/assignment-client/src/octree/OctreeServer.cpp @@ -861,8 +861,11 @@ dataAt += sizeof(uint16_t); // read sequence numbers QList sequenceNumbers; for (int i = 0; i < numSequenceNumbers; i++) { - sequenceNumbers.append(*(OCTREE_PACKET_SEQUENCE*)dataAt); + OCTREE_PACKET_SEQUENCE sequenceNumber = (*(OCTREE_PACKET_SEQUENCE*)dataAt); + sequenceNumbers.append(sequenceNumber); dataAt += sizeof(OCTREE_PACKET_SEQUENCE); + +printf("\t\t\t nacked packet: seq = %d\n", sequenceNumber); } OctreeQueryNode* nodeData = (OctreeQueryNode*)matchingNode->getLinkedData(); // move this or something