From 09f978207b304fa90374376856c96fa7b8f7f923 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 10 Jul 2015 12:23:58 -0700 Subject: [PATCH] Add packet handling to OctreeServer --- assignment-client/src/octree/OctreeServer.cpp | 36 +++++++++++++++++++ assignment-client/src/octree/OctreeServer.h | 5 +++ 2 files changed, 41 insertions(+) diff --git a/assignment-client/src/octree/OctreeServer.cpp b/assignment-client/src/octree/OctreeServer.cpp index 3a3b5dec37..55d6f0be81 100644 --- a/assignment-client/src/octree/OctreeServer.cpp +++ b/assignment-client/src/octree/OctreeServer.cpp @@ -247,6 +247,11 @@ OctreeServer::OctreeServer(const QByteArray& packet) : // make sure the AccountManager has an Auth URL for payment redemptions AccountManager::getInstance().setAuthURL(NetworkingConstants::METAVERSE_SERVER_URL); + + auto packetReceiver = DependencyManager::get()->getPacketReceiver(); + packetReceiver->registerPacketListener(getMyQueryMessageType(), this, "handleOctreeQueryPacket"); + packetReceiver->registerPacketListener(PacketType::OctreeDataNack, this, "handleOctreeDataNackPacket"); + packetReceiver->registerPacketListener(PacketType::JurisdictionRequest, this, "handleJurisdictionRequestPacket"); } OctreeServer::~OctreeServer() { @@ -855,6 +860,37 @@ void OctreeServer::readPendingDatagram(const QByteArray& receivedPacket, const H } } +void handleOctreeQueryPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { + // 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. + SharedNodePointer matchingNode = nodeList->nodeWithUUID(packet->getSourceID()); + if (matchingNode) { + nodeList->updateNodeWithDataFromPacket(matchingNode, packet->getData()); + + OctreeQueryNode* nodeData = (OctreeQueryNode*) matchingNode->getLinkedData(); + if (nodeData && !nodeData->isOctreeSendThreadInitalized()) { + nodeData->initializeOctreeSendThread(this, matchingNode); + } + } +} + +void handleOctreeDataNackPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { + // 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. + SharedNodePointer matchingNode = nodeList->nodeWithUUID(packet->getSourceID()); + if (matchingNode) { + OctreeQueryNode* nodeData = (OctreeQueryNode*)matchingNode->getLinkedData(); + if (nodeData) { + nodeData->parseNackPacket(packet->getData()); + } + } +} + +void handleJurisdictionRequestPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { + SharedNodePointer matchingNode = nodeList->nodeWithUUID(packet->getSourceID()); + _jurisdictionSender->queueReceivedPacket(matchingNode, packet->getData()); +} + void OctreeServer::setupDatagramProcessingThread() { auto nodeList = DependencyManager::get(); diff --git a/assignment-client/src/octree/OctreeServer.h b/assignment-client/src/octree/OctreeServer.h index ec5c85c3f5..d25ef3183b 100644 --- a/assignment-client/src/octree/OctreeServer.h +++ b/assignment-client/src/octree/OctreeServer.h @@ -128,6 +128,11 @@ public slots: void readPendingDatagrams() { }; // this will not be called since our datagram processing thread will handle void readPendingDatagram(const QByteArray& receivedPacket, const HifiSockAddr& senderSockAddr); +private slots: + void handleOctreeQueryPacket(QSharedPointer packet, HifiSockAddr senderSockAddr); + void handleOctreeDataNackPacket(QSharedPointer packet, HifiSockAddr senderSockAddr); + void handleJurisdictionRequestPacket(QSharedPointer packet, HifiSockAddr senderSockAddr); + protected: virtual Octree* createTree() = 0; bool readOptionBool(const QString& optionName, const QJsonObject& settingsSectionObject, bool& result);