Add packet handling to OctreeServer

This commit is contained in:
Ryan Huffman 2015-07-10 12:23:58 -07:00
parent 1ee7a83927
commit 09f978207b
2 changed files with 41 additions and 0 deletions

View file

@ -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<NodeList>()->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<NLPacket> 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<NLPacket> 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<NLPacket> packet, HifiSockAddr senderSockAddr) {
SharedNodePointer matchingNode = nodeList->nodeWithUUID(packet->getSourceID());
_jurisdictionSender->queueReceivedPacket(matchingNode, packet->getData());
}
void OctreeServer::setupDatagramProcessingThread() {
auto nodeList = DependencyManager::get<NodeList>();

View file

@ -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<NLPacket> packet, HifiSockAddr senderSockAddr);
void handleOctreeDataNackPacket(QSharedPointer<NLPacket> packet, HifiSockAddr senderSockAddr);
void handleJurisdictionRequestPacket(QSharedPointer<NLPacket> packet, HifiSockAddr senderSockAddr);
protected:
virtual Octree* createTree() = 0;
bool readOptionBool(const QString& optionName, const QJsonObject& settingsSectionObject, bool& result);