From 010cbd9934ba2dd4cb99ebe7faff5193a6c4b3e8 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 16 Jul 2015 14:42:16 -0700 Subject: [PATCH 1/3] don't handle octree query while server shutting down --- assignment-client/src/octree/OctreeServer.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/assignment-client/src/octree/OctreeServer.cpp b/assignment-client/src/octree/OctreeServer.cpp index 1cd59d804f..f493decae9 100644 --- a/assignment-client/src/octree/OctreeServer.cpp +++ b/assignment-client/src/octree/OctreeServer.cpp @@ -813,14 +813,16 @@ void OctreeServer::parsePayload() { } void OctreeServer::handleOctreeQueryPacket(QSharedPointer packet, SharedNodePointer senderNode) { - // If we got a query packet, then we're talking to an agent, and we - // need to make sure we have it in our nodeList. - auto nodeList = DependencyManager::get(); - nodeList->updateNodeWithDataFromPacket(packet, senderNode); - - OctreeQueryNode* nodeData = dynamic_cast(senderNode->getLinkedData()); - if (nodeData && !nodeData->isOctreeSendThreadInitalized()) { - nodeData->initializeOctreeSendThread(this, senderNode); + if (!_isFinished) { + // If we got a query packet, then we're talking to an agent, and we + // need to make sure we have it in our nodeList. + auto nodeList = DependencyManager::get(); + nodeList->updateNodeWithDataFromPacket(packet, senderNode); + + OctreeQueryNode* nodeData = dynamic_cast(senderNode->getLinkedData()); + if (nodeData && !nodeData->isOctreeSendThreadInitalized()) { + nodeData->initializeOctreeSendThread(this, senderNode); + } } } From b1d240defdb96c0b7c576ba6fb1eb83f55d8bfda Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 16 Jul 2015 14:43:57 -0700 Subject: [PATCH 2/3] add extra debug to IceServer --- ice-server/src/IceServer.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ice-server/src/IceServer.cpp b/ice-server/src/IceServer.cpp index d2a2b09568..f56fe9202f 100644 --- a/ice-server/src/IceServer.cpp +++ b/ice-server/src/IceServer.cpp @@ -82,6 +82,9 @@ void IceServer::processDatagrams() { SharedNetworkPeer matchingPeer = _activePeers.value(connectRequestID); if (matchingPeer) { + + qDebug() << "Sending information for peer" << connectRequestID << "to peer" << senderUUID; + // we have the peer they want to connect to - send them pack the information for that peer sendPeerInformationPacket(*(matchingPeer.data()), &sendingSockAddr); @@ -90,6 +93,8 @@ void IceServer::processDatagrams() { NetworkPeer dummyPeer(senderUUID, publicSocket, localSocket); sendPeerInformationPacket(dummyPeer, matchingPeer->getActiveSocket()); + } else { + qDebug() << "Peer" << senderUUID << "asked for" << connectRequestID << "but no matching peer found"; } } } From 29f91267d9c038b231a66d5ef71a505b4ee607e0 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 16 Jul 2015 15:29:50 -0700 Subject: [PATCH 3/3] 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); } }