From 29f91267d9c038b231a66d5ef71a505b4ee607e0 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 16 Jul 2015 15:29:50 -0700 Subject: [PATCH] repairs to nack packet receiving for entity-server --- .../octree/OctreeInboundPacketProcessor.cpp | 6 ++++-- .../src/octree/OctreeQueryNode.cpp | 18 ++++-------------- assignment-client/src/octree/OctreeQueryNode.h | 2 +- assignment-client/src/octree/OctreeServer.cpp | 2 +- 4 files changed, 10 insertions(+), 18 deletions(-) diff --git a/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp b/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp index d70afa4e04..fe61a3945c 100644 --- a/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp +++ b/assignment-client/src/octree/OctreeInboundPacketProcessor.cpp @@ -250,7 +250,7 @@ int OctreeInboundPacketProcessor::sendNackPackets() { QUuid nodeUUID = i.key(); SingleSenderStats nodeStats = i.value(); - + // check if this node is still alive. Remove its stats if it's dead. if (!isAlive(nodeUUID)) { i = _singleSenderStats.erase(i); @@ -260,7 +260,7 @@ int OctreeInboundPacketProcessor::sendNackPackets() { // if there are packets from _node that are waiting to be processed, // don't send a NACK since the missing packets may be among those waiting packets. if (hasPacketsToProcessFrom(nodeUUID)) { - i++; + ++i; continue; } @@ -290,6 +290,8 @@ int OctreeInboundPacketProcessor::sendNackPackets() { // send the list of nack packets nodeList->sendPacketList(nackPacketList, *destinationNode); } + + ++i; } return packetsSent; diff --git a/assignment-client/src/octree/OctreeQueryNode.cpp b/assignment-client/src/octree/OctreeQueryNode.cpp index c8330209ce..6395397c51 100644 --- a/assignment-client/src/octree/OctreeQueryNode.cpp +++ b/assignment-client/src/octree/OctreeQueryNode.cpp @@ -374,21 +374,11 @@ const NLPacket* OctreeQueryNode::getNextNackedPacket() { return nullptr; } -void OctreeQueryNode::parseNackPacket(const QByteArray& packet) { - - int numBytesPacketHeader = numBytesForPacketHeader(packet); - const unsigned char* dataAt = reinterpret_cast(packet.data()) + numBytesPacketHeader; - - // TODO: This no longer has the number of sequence numbers - just read to the end of the packet in sequence number blocks - - // read number of sequence numbers - uint16_t numSequenceNumbers = (*(uint16_t*)dataAt); - dataAt += sizeof(uint16_t); - +void OctreeQueryNode::parseNackPacket(NLPacket& packet) { // read sequence numbers - for (int i = 0; i < numSequenceNumbers; i++) { - OCTREE_PACKET_SEQUENCE sequenceNumber = (*(OCTREE_PACKET_SEQUENCE*)dataAt); + while (packet.bytesLeftToRead()) { + OCTREE_PACKET_SEQUENCE sequenceNumber; + packet.readPrimitive(&sequenceNumber); _nackedSequenceNumbers.enqueue(sequenceNumber); - dataAt += sizeof(OCTREE_PACKET_SEQUENCE); } } diff --git a/assignment-client/src/octree/OctreeQueryNode.h b/assignment-client/src/octree/OctreeQueryNode.h index d752b8d0e8..5982eeb4bc 100644 --- a/assignment-client/src/octree/OctreeQueryNode.h +++ b/assignment-client/src/octree/OctreeQueryNode.h @@ -108,7 +108,7 @@ public: OCTREE_PACKET_SEQUENCE getSequenceNumber() const { return _sequenceNumber; } - void parseNackPacket(const QByteArray& packet); + void parseNackPacket(NLPacket& packet); bool hasNextNackedPacket() const; const NLPacket* getNextNackedPacket(); diff --git a/assignment-client/src/octree/OctreeServer.cpp b/assignment-client/src/octree/OctreeServer.cpp index f493decae9..f5d599b5d3 100644 --- a/assignment-client/src/octree/OctreeServer.cpp +++ b/assignment-client/src/octree/OctreeServer.cpp @@ -831,7 +831,7 @@ void OctreeServer::handleOctreeDataNackPacket(QSharedPointer packet, S // need to make sure we have it in our nodeList. OctreeQueryNode* nodeData = dynamic_cast(senderNode->getLinkedData()); if (nodeData) { - nodeData->parseNackPacket(packet->getData()); + nodeData->parseNackPacket(*packet); } }