From aa694d69678d94c71d3961de068e5bf0d1a4c562 Mon Sep 17 00:00:00 2001 From: wangyix Date: Mon, 9 Jun 2014 12:35:26 -0700 Subject: [PATCH] removed debug code --- .../src/octree/OctreeQueryNode.cpp | 20 +++++++++ .../src/octree/OctreeQueryNode.h | 11 ++--- .../src/octree/OctreeSendThread.cpp | 22 +++------- .../src/octree/OctreeSendThread.h | 2 +- assignment-client/src/octree/OctreeServer.cpp | 36 ++++------------ .../src/octree/SentPacketHistory.cpp | 5 ++- .../src/octree/SentPacketHistory.h | 1 - interface/src/Application.cpp | 42 ++++--------------- interface/src/Application.h | 4 +- libraries/networking/src/LimitedNodeList.cpp | 17 -------- libraries/networking/src/LimitedNodeList.h | 3 -- libraries/networking/src/PacketHeaders.h | 2 +- libraries/octree/src/OctreeSceneStats.cpp | 12 +++--- libraries/octree/src/OctreeSceneStats.h | 9 ++-- 14 files changed, 64 insertions(+), 122 deletions(-) diff --git a/assignment-client/src/octree/OctreeQueryNode.cpp b/assignment-client/src/octree/OctreeQueryNode.cpp index 5cfe5501e1..f8b5e34472 100644 --- a/assignment-client/src/octree/OctreeQueryNode.cpp +++ b/assignment-client/src/octree/OctreeQueryNode.cpp @@ -388,3 +388,23 @@ const QByteArray* OctreeQueryNode::getNextNackedPacket() { } return NULL; } + +void OctreeQueryNode::parseNackPacket(QByteArray& packet) { + + int numBytesPacketHeader = numBytesForPacketHeader(packet); + const unsigned char* dataAt = reinterpret_cast(packet.data()) + numBytesPacketHeader; + + uint16_t numSequenceNumbers = (*(uint16_t*)dataAt); + dataAt += sizeof(uint16_t); + + printf("\t received nack packet containing %d seq nums\n", numSequenceNumbers); + + // read sequence numbers + for (int i = 0; i < numSequenceNumbers; i++) { + OCTREE_PACKET_SEQUENCE sequenceNumber = (*(OCTREE_PACKET_SEQUENCE*)dataAt); + _nackedSequenceNumbers.enqueue(sequenceNumber); + dataAt += sizeof(OCTREE_PACKET_SEQUENCE); + + printf("\t seq = %d\n", sequenceNumber); + } +} diff --git a/assignment-client/src/octree/OctreeQueryNode.h b/assignment-client/src/octree/OctreeQueryNode.h index b79367503c..d955d3fdf7 100644 --- a/assignment-client/src/octree/OctreeQueryNode.h +++ b/assignment-client/src/octree/OctreeQueryNode.h @@ -24,8 +24,7 @@ #include #include // for SharedAssignmentPointer #include "SentPacketHistory.h" - -#include // i added dis +#include class OctreeSendThread; @@ -109,9 +108,7 @@ public: OCTREE_PACKET_SEQUENCE getSequenceNumber() const { return _sequenceNumber; } - void addNackedSequenceNumber(OCTREE_PACKET_SEQUENCE sequenceNumber) { - _nackedSequenceNumbers.append(sequenceNumber); - } + void parseNackPacket(QByteArray& packet); bool hasNextNackedPacket() const; const QByteArray* getNextNackedPacket(); @@ -158,8 +155,8 @@ private: PacketType _myPacketType; bool _isShuttingDown; -SentPacketHistory _sentPacketHistory; -QQueue _nackedSequenceNumbers; + SentPacketHistory _sentPacketHistory; + QQueue _nackedSequenceNumbers; }; #endif // hifi_OctreeQueryNode_h diff --git a/assignment-client/src/octree/OctreeSendThread.cpp b/assignment-client/src/octree/OctreeSendThread.cpp index 6f39cd28dc..30e3011ae8 100644 --- a/assignment-client/src/octree/OctreeSendThread.cpp +++ b/assignment-client/src/octree/OctreeSendThread.cpp @@ -85,7 +85,7 @@ bool OctreeSendThread::process() { if (nodeData && !nodeData->isShuttingDown()) { bool viewFrustumChanged = nodeData->updateCurrentViewFrustum(); packetDistributor(nodeData, viewFrustumChanged); -resendNackedPackets(nodeData); + resendNackedPackets(nodeData); } } } @@ -181,7 +181,7 @@ int OctreeSendThread::handlePacketSend(OctreeQueryNode* nodeData, int& trueBytes // actually send it OctreeServer::didCallWriteDatagram(this); -NodeList::getInstance()->writeDatagram2(nodeData->getSequenceNumber(), (char*) statsMessage, statsMessageLength, _node); + NodeList::getInstance()->writeDatagram((char*) statsMessage, statsMessageLength, _node); packetSent = true; } else { // not enough room in the packet, send two packets @@ -215,7 +215,7 @@ NodeList::getInstance()->writeDatagram2(nodeData->getSequenceNumber(), (char*) s packetsSent++; OctreeServer::didCallWriteDatagram(this); -NodeList::getInstance()->writeDatagram2(nodeData->getSequenceNumber(), (char*)nodeData->getPacket(), nodeData->getPacketLength(), _node); + NodeList::getInstance()->writeDatagram((char*)nodeData->getPacket(), nodeData->getPacketLength(), _node); packetSent = true; thisWastedBytes = MAX_PACKET_SIZE - nodeData->getPacketLength(); @@ -244,7 +244,7 @@ NodeList::getInstance()->writeDatagram2(nodeData->getSequenceNumber(), (char*)no if (nodeData->isPacketWaiting() && !nodeData->isShuttingDown()) { // just send the voxel packet OctreeServer::didCallWriteDatagram(this); -NodeList::getInstance()->writeDatagram2(nodeData->getSequenceNumber(), (char*)nodeData->getPacket(), nodeData->getPacketLength(), _node); + NodeList::getInstance()->writeDatagram((char*)nodeData->getPacket(), nodeData->getPacketLength(), _node); packetSent = true; int thisWastedBytes = MAX_PACKET_SIZE - nodeData->getPacketLength(); @@ -281,10 +281,6 @@ NodeList::getInstance()->writeDatagram2(nodeData->getSequenceNumber(), (char*)no return packetsSent; } - - - - int OctreeSendThread::resendNackedPackets(OctreeQueryNode* nodeData) { const int MAX_PACKETS_RESEND = 10; @@ -299,20 +295,12 @@ int OctreeSendThread::resendNackedPackets(OctreeQueryNode* nodeData) { _totalBytes += packet->size(); _totalPackets++; - _totalWastedBytes += MAX_PACKET_SIZE - packet->size(); // ??? + _totalWastedBytes += MAX_PACKET_SIZE - packet->size(); } } - -if (packetsSent > 0) -printf("\t\t re-sent %d packets!\n", packetsSent); return packetsSent; } - - - - - /// 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/OctreeSendThread.h b/assignment-client/src/octree/OctreeSendThread.h index cc0cdac3ad..e7599ebcd2 100644 --- a/assignment-client/src/octree/OctreeSendThread.h +++ b/assignment-client/src/octree/OctreeSendThread.h @@ -56,7 +56,7 @@ private: int _nodeMissingCount; bool _isShuttingDown; -int resendNackedPackets(OctreeQueryNode* nodeData); + int resendNackedPackets(OctreeQueryNode* nodeData); }; diff --git a/assignment-client/src/octree/OctreeServer.cpp b/assignment-client/src/octree/OctreeServer.cpp index 8cf1649cdb..9d3402b895 100644 --- a/assignment-client/src/octree/OctreeServer.cpp +++ b/assignment-client/src/octree/OctreeServer.cpp @@ -849,33 +849,15 @@ void OctreeServer::readPendingDatagrams() { } } else if (packetType == PacketTypeOctreeDataNack) { - -// parse packet for sequence numbers that need to be resent - -if (matchingNode) { - - OctreeQueryNode* nodeData = (OctreeQueryNode*)matchingNode->getLinkedData(); - - int numBytesPacketHeader = numBytesForPacketHeader(receivedPacket); - const unsigned char* dataAt = reinterpret_cast(receivedPacket.data()) + numBytesPacketHeader; - - uint16_t numSequenceNumbers = (*(uint16_t*)dataAt); - dataAt += sizeof(uint16_t); - -printf("\t received nack packet containing %d seq nums\n", numSequenceNumbers); - - // read sequence numbers - for (int i = 0; i < numSequenceNumbers; i++) { - OCTREE_PACKET_SEQUENCE sequenceNumber = (*(OCTREE_PACKET_SEQUENCE*)dataAt); - nodeData->addNackedSequenceNumber(sequenceNumber); - dataAt += sizeof(OCTREE_PACKET_SEQUENCE); - -printf("\t seq = %d\n", sequenceNumber); - } -} - - - + // If we got a nack packet, then we're talking to an agent, and we + // need to make sure we have it in our nodeList. + if (matchingNode) { + nodeList->updateNodeWithDataFromPacket(matchingNode, receivedPacket); + OctreeQueryNode* nodeData = (OctreeQueryNode*)matchingNode->getLinkedData(); + if (nodeData) { + nodeData->parseNackPacket(receivedPacket); + } + } } else if (packetType == PacketTypeJurisdictionRequest) { _jurisdictionSender->queueReceivedPacket(matchingNode, receivedPacket); } else if (_octreeInboundPacketProcessor && getOctree()->handlesEditPacketType(packetType)) { diff --git a/assignment-client/src/octree/SentPacketHistory.cpp b/assignment-client/src/octree/SentPacketHistory.cpp index 0de163a23d..751e46e786 100644 --- a/assignment-client/src/octree/SentPacketHistory.cpp +++ b/assignment-client/src/octree/SentPacketHistory.cpp @@ -21,7 +21,8 @@ SentPacketHistory::SentPacketHistory(int size) void SentPacketHistory::packetSent(OCTREE_PACKET_SEQUENCE sequenceNumber, const QByteArray& packet) { _newestSequenceNumber = sequenceNumber; - // increment _newestPacketAt cyclically, insert new packet there + // increment _newestPacketAt cyclically, insert new packet there. + // this will overwrite the oldest packet in the buffer _newestPacketAt = (_newestPacketAt == _sentPackets.size() - 1) ? 0 : _newestPacketAt + 1; _sentPackets[_newestPacketAt] = packet; @@ -42,4 +43,4 @@ const QByteArray* SentPacketHistory::getPacket(OCTREE_PACKET_SEQUENCE sequenceNu if (packetAt < 0) { packetAt += _sentPackets.size(); } return &_sentPackets.at(packetAt); -} \ No newline at end of file +} diff --git a/assignment-client/src/octree/SentPacketHistory.h b/assignment-client/src/octree/SentPacketHistory.h index cbc50bc73c..4231400ac1 100644 --- a/assignment-client/src/octree/SentPacketHistory.h +++ b/assignment-client/src/octree/SentPacketHistory.h @@ -25,7 +25,6 @@ public: const QByteArray* getPacket(OCTREE_PACKET_SEQUENCE sequenceNumber) const; private: - QVector _sentPackets; // circular buffer int _newestPacketAt; int _numExistingPackets; diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 3ebfe728de..18a8d3ba12 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2095,33 +2095,17 @@ void Application::updateMyAvatar(float deltaTime) { } } -// sent a nack packet containing missing sequence numbers of received packets -{ - quint64 now = usecTimestampNow(); - quint64 sinceLastNack = now - _lastNackTime; - const quint64 TOO_LONG_SINCE_LAST_NACK = 250 * MSECS_PER_SECOND; - if (sinceLastNack > TOO_LONG_SINCE_LAST_NACK) { - _lastNackTime = now; - sendNack(); - } -} -} - -/*/ Attempt to identify the sender from it's address. - if (sendingNode) { - QUuid nodeUUID = sendingNode->getUUID(); - - // now that we know the node ID, let's add these stats to the stats for that node... - _octreeSceneStatsLock.lockForWrite(); - if (_octreeServerSceneStats.find(nodeUUID) != _octreeServerSceneStats.end()) { - OctreeSceneStats& stats = _octreeServerSceneStats[nodeUUID]; - stats.trackIncomingOctreePacket(packet, wasStatsPacket, sendingNode->getClockSkewUsec()); + // sent a nack packet containing missing sequence numbers of received packets + { + quint64 now = usecTimestampNow(); + quint64 sinceLastNack = now - _lastNackTime; + const quint64 TOO_LONG_SINCE_LAST_NACK = 250 * MSECS_PER_SECOND; + if (sinceLastNack > TOO_LONG_SINCE_LAST_NACK) { + _lastNackTime = now; + sendNack(); } - _octreeSceneStatsLock.unlock(); } - */ - - +} void Application::sendNack() { @@ -2139,7 +2123,6 @@ void Application::sendNack() { QUuid nodeUUID = node->getUUID(); - _octreeSceneStatsLock.lockForWrite(); // retreive octree scene stats of this node @@ -2172,15 +2155,11 @@ void Application::sendNack() { dataAt += sizeof(uint16_t); // pack sequence numbers -//printf("\n\t sending nack...\n"); -//printf("\t\t packed %d seq #s:", numSequenceNumbers); for (int i = 0; i < numSequenceNumbers; i++) { OCTREE_PACKET_SEQUENCE* sequenceNumberAt = (OCTREE_PACKET_SEQUENCE*)dataAt; *sequenceNumberAt = stats.getNextSequenceNumberToNack(); dataAt += sizeof(OCTREE_PACKET_SEQUENCE); -//printf(" %d,", *sequenceNumberAt); } -//printf("\n"); _octreeSceneStatsLock.unlock(); @@ -2189,9 +2168,6 @@ void Application::sendNack() { } } - - - void Application::queryOctree(NodeType_t serverType, PacketType packetType, NodeToJurisdictionMap& jurisdictions) { // if voxels are disabled, then don't send this at all... diff --git a/interface/src/Application.h b/interface/src/Application.h index 670ec35238..170be43493 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -413,8 +413,6 @@ private: void sendNack(); - - MainWindow* _window; GLCanvas* _glWidget; // our GLCanvas has a couple extra features @@ -585,7 +583,7 @@ private: QSystemTrayIcon* _trayIcon; -quint64 _lastNackTime; + quint64 _lastNackTime; }; #endif // hifi_Application_h diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index 15cebc26ac..c0d7941edf 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -271,23 +271,6 @@ qint64 LimitedNodeList::writeDatagram(const char* data, qint64 size, const Share return writeDatagram(QByteArray(data, size), destinationNode, overridenSockAddr); } -qint64 LimitedNodeList::writeDatagram2(int seq, const char* data, qint64 size, const SharedNodePointer& destinationNode, - const HifiSockAddr& overridenSockAddr) { - - qint64 ret = -1; - - if (randFloat() < 0.8f) { - ret = writeDatagram(QByteArray(data, size), destinationNode, overridenSockAddr); - } - else { - printf("dropped packet seq = %d --------------------------\n", seq); - } - - - return ret; -} - - qint64 LimitedNodeList::writeUnverifiedDatagram(const char* data, qint64 size, const SharedNodePointer& destinationNode, const HifiSockAddr& overridenSockAddr) { return writeUnverifiedDatagram(QByteArray(data, size), destinationNode, overridenSockAddr); diff --git a/libraries/networking/src/LimitedNodeList.h b/libraries/networking/src/LimitedNodeList.h index b3481885c8..a4bc8022bf 100644 --- a/libraries/networking/src/LimitedNodeList.h +++ b/libraries/networking/src/LimitedNodeList.h @@ -72,9 +72,6 @@ public: qint64 writeDatagram(const char* data, qint64 size, const SharedNodePointer& destinationNode, const HifiSockAddr& overridenSockAddr = HifiSockAddr()); -qint64 writeDatagram2(int seq, const char* data, qint64 size, const SharedNodePointer& destinationNode, - const HifiSockAddr& overridenSockAddr = HifiSockAddr()); - qint64 writeUnverifiedDatagram(const char* data, qint64 size, const SharedNodePointer& destinationNode, const HifiSockAddr& overridenSockAddr = HifiSockAddr()); diff --git a/libraries/networking/src/PacketHeaders.h b/libraries/networking/src/PacketHeaders.h index eac2f88870..8ac5333d10 100644 --- a/libraries/networking/src/PacketHeaders.h +++ b/libraries/networking/src/PacketHeaders.h @@ -76,7 +76,7 @@ const QSet NON_VERIFIED_PACKETS = QSet() << PacketTypeDomainList << PacketTypeDomainListRequest << PacketTypeDomainOAuthRequest << PacketTypeCreateAssignment << PacketTypeRequestAssignment << PacketTypeStunResponse << PacketTypeNodeJsonStats << PacketTypeVoxelQuery << PacketTypeParticleQuery << PacketTypeModelQuery -<< PacketTypeOctreeDataNack; + << PacketTypeOctreeDataNack; const int NUM_BYTES_MD5_HASH = 16; const int NUM_STATIC_HEADER_BYTES = sizeof(PacketVersion) + NUM_BYTES_RFC4122_UUID; diff --git a/libraries/octree/src/OctreeSceneStats.cpp b/libraries/octree/src/OctreeSceneStats.cpp index a93b2d0374..868ef29886 100644 --- a/libraries/octree/src/OctreeSceneStats.cpp +++ b/libraries/octree/src/OctreeSceneStats.cpp @@ -46,7 +46,7 @@ OctreeSceneStats::OctreeSceneStats() : _incomingReallyLate(0), _incomingPossibleDuplicate(0), _missingSequenceNumbers(), -_sequenceNumbersToNack(), + _sequenceNumbersToNack(), _incomingFlightTimeAverage(samples), _jurisdictionRoot(NULL) { @@ -159,7 +159,7 @@ void OctreeSceneStats::copyFromOther(const OctreeSceneStats& other) { _incomingPossibleDuplicate = other._incomingPossibleDuplicate; _missingSequenceNumbers = other._missingSequenceNumbers; -_sequenceNumbersToNack = other._sequenceNumbersToNack; + _sequenceNumbersToNack = other._sequenceNumbersToNack; } @@ -928,7 +928,7 @@ void OctreeSceneStats::trackIncomingOctreePacket(const QByteArray& packet, qDebug() << "found it in _missingSequenceNumbers"; } _missingSequenceNumbers.remove(sequence); -_sequenceNumbersToNack.remove(sequence); + _sequenceNumbersToNack.remove(sequence); _incomingLikelyLost--; _incomingRecovered++; } else { @@ -958,7 +958,7 @@ _sequenceNumbersToNack.remove(sequence); _incomingLikelyLost += missing; for(unsigned int missingSequence = expected; missingSequence < sequence; missingSequence++) { _missingSequenceNumbers << missingSequence; -_sequenceNumbersToNack << missingSequence; + _sequenceNumbersToNack << missingSequence; } } } @@ -986,7 +986,7 @@ _sequenceNumbersToNack << missingSequence; qDebug() << "pruning really old missing sequence:" << missingItem; } _missingSequenceNumbers.remove(missingItem); -_sequenceNumbersToNack.remove(missingItem); + _sequenceNumbersToNack.remove(missingItem); } } } @@ -1002,4 +1002,4 @@ uint16_t OctreeSceneStats::getNextSequenceNumberToNack() { uint16_t sequenceNumber = *it; _sequenceNumbersToNack.remove(sequenceNumber); return sequenceNumber; -} \ No newline at end of file +} diff --git a/libraries/octree/src/OctreeSceneStats.h b/libraries/octree/src/OctreeSceneStats.h index ca9bf7c74b..182bd6c86c 100644 --- a/libraries/octree/src/OctreeSceneStats.h +++ b/libraries/octree/src/OctreeSceneStats.h @@ -16,6 +16,7 @@ #include #include #include "JurisdictionMap.h" +#include "OctreePacketData.h" #define GREENISH 0x40ff40d0 #define YELLOWISH 0xffef40c0 @@ -172,8 +173,8 @@ public: quint32 getIncomingPossibleDuplicate() const { return _incomingPossibleDuplicate; } float getIncomingFlightTimeAverage() { return _incomingFlightTimeAverage.getAverage(); } -int getNumSequenceNumbersToNack() const; -uint16_t getNextSequenceNumberToNack(); + int getNumSequenceNumbersToNack() const; + OCTREE_PACKET_SEQUENCE getNextSequenceNumberToNack(); private: @@ -275,8 +276,8 @@ private: quint32 _incomingLate; /// out of order later than expected quint32 _incomingReallyLate; /// out of order and later than MAX_MISSING_SEQUENCE_OLD_AGE late quint32 _incomingPossibleDuplicate; /// out of order possibly a duplicate - QSet _missingSequenceNumbers; -QSet _sequenceNumbersToNack; + QSet _missingSequenceNumbers; + QSet _sequenceNumbersToNack; SimpleMovingAverage _incomingFlightTimeAverage; // features related items