From e0d165bdd88236ae69566c41f9e5b279f39facb2 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 10 Jul 2015 16:48:28 -0700 Subject: [PATCH 01/15] Fix packet type in AssignmentClient for StopNode --- assignment-client/src/AssignmentClient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index dda505429d..499ed93c89 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -122,7 +122,7 @@ AssignmentClient::AssignmentClient(Assignment::Type requestAssignmentType, QStri } auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); packetReceiver.registerPacketListener(PacketType::CreateAssignment, this, "handleCreateAssignmentPacket"); - packetReceiver.registerPacketListener(PacketType::CreateAssignment, this, "handleStopNodePacket"); + packetReceiver.registerPacketListener(PacketType::StopNode, this, "handleStopNodePacket"); } From 8c04aafe67e25a4b5094fe051026d5924ecb5abd Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 10 Jul 2015 17:08:07 -0700 Subject: [PATCH 02/15] Update Agent to use PacketReceiver --- assignment-client/src/Agent.cpp | 83 +++++++++++++++++++-------------- assignment-client/src/Agent.h | 2 + 2 files changed, 49 insertions(+), 36 deletions(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 0576a0d4f0..6166923832 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -48,9 +48,36 @@ Agent::Agent(const QByteArray& packet) : DependencyManager::set(); DependencyManager::set(); - auto& packetReceiver = DependencyManager::get()->getPackingReceiver(); + auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); packetReceiver.registerPacketListener(PacketType::MixedAudio, this, "handleAudioPacket"); packetReceiver.registerPacketListener(PacketType::SilentAudioFrame, this, "handleAudioPacket"); + packetReceiver.registerPacketListener(PacketType::OctreeStats, this, "handleOctreePacket"); + packetReceiver.registerPacketListener(PacketType::EntityData, this, "handleOctreePacket"); + packetReceiver.registerPacketListener(PacketType::EntityErase, this, "handleOctreePacket"); + packetReceiver.registerPacketListener(PacketType::Jurisdiction, this, "handleJurisdictionPacket"); +} + +void Agent::handleOctreePacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) { + QByteArray mutablePacket = QByteArray(packet->getData(), packet->getSizeWithHeader()); + int messageLength = mutablePacket.size(); + + auto packetType = packet->getType(); + + if (packetType == PacketType::OctreeStats) { + + int statsMessageLength = OctreeHeadlessViewer::parseOctreeStats(mutablePacket, senderNode); + if (messageLength > statsMessageLength) { + mutablePacket = mutablePacket.mid(statsMessageLength); + } else { + return; // bail since no piggyback data + } + + packetType = packetTypeForPacket(mutablePacket); + } // fall through to piggyback message + + if (packetType == PacketType::EntityData || packetType == PacketType::EntityErase) { + _entityViewer.processDatagram(mutablePacket, senderNode); + } } void Agent::readPendingDatagrams() { @@ -76,47 +103,31 @@ void Agent::readPendingDatagrams() { break; } } - - } else if (datagramPacketType == PacketType::OctreeStats - || datagramPacketType == PacketType::EntityData - || datagramPacketType == PacketType::EntityErase - ) { - // Make sure our Node and NodeList knows we've heard from this node. - SharedNodePointer sourceNode = nodeList->sendingNodeForPacket(receivedPacket); - sourceNode->setLastHeardMicrostamp(usecTimestampNow()); - - QByteArray mutablePacket = receivedPacket; - int messageLength = mutablePacket.size(); - - if (datagramPacketType == PacketType::OctreeStats) { - - int statsMessageLength = OctreeHeadlessViewer::parseOctreeStats(mutablePacket, sourceNode); - if (messageLength > statsMessageLength) { - mutablePacket = mutablePacket.mid(statsMessageLength); - - // TODO: this needs to be fixed, the goal is to test the packet version for the piggyback, but - // this is testing the version and hash of the original packet - // need to use numBytesArithmeticCodingFromBuffer()... - if (!DependencyManager::get()->packetVersionAndHashMatch(receivedPacket)) { - return; // bail since piggyback data doesn't match our versioning - } - } else { - return; // bail since no piggyback data - } - - datagramPacketType = packetTypeForPacket(mutablePacket); - } // fall through to piggyback message - - if (datagramPacketType == PacketType::EntityData || datagramPacketType == PacketType::EntityErase) { - _entityViewer.processDatagram(mutablePacket, sourceNode); - } } } } } +void Agent::handleJurisdictionPacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) { + QByteArray receivedPacket = QByteArray::fromRawData(packet->getData(), packet->getSizeWithHeader()); + int headerBytes = numBytesForPacketHeader(receivedPacket); + + auto nodeList = DependencyManager::get(); + SharedNodePointer matchedNode = nodeList->sendingNodeForPacket(receivedPacket); + + if (matchedNode) { + // PacketType_JURISDICTION, first byte is the node type... + switch (receivedPacket[headerBytes]) { + case NodeType::EntityServer: + DependencyManager::get()->getJurisdictionListener()-> + queueReceivedPacket(senderNode, receivedPacket); + break; + } + } +} + void Agent::handleAudioPacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) { - _receivedAudioStream.parseData(receivedPacket); + _receivedAudioStream.parseData(QByteArray::fromRawData(packet->getData(), packet->getSizeWithHeader())); _lastReceivedAudioLoudness = _receivedAudioStream.getNextOutputFrameLoudness(); diff --git a/assignment-client/src/Agent.h b/assignment-client/src/Agent.h index bee043f6f4..70e1913b54 100644 --- a/assignment-client/src/Agent.h +++ b/assignment-client/src/Agent.h @@ -57,6 +57,8 @@ public slots: private slots: void handleAudioPacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr); + void handleOctreePacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr); + void handleJurisdictionPacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr); private: ScriptEngine _scriptEngine; From bfb878210f5b430153dcf7a9dc7952de41275bfc Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 10 Jul 2015 17:27:45 -0700 Subject: [PATCH 03/15] Fix compilation errors in AudioMixer --- assignment-client/src/audio/AudioMixer.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index ec9998c881..dc790e99f4 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -544,28 +544,34 @@ void AudioMixer::sendAudioEnvironmentPacket(SharedNodePointer node) { } void AudioMixer::readPendingDatagram(const QByteArray& receivedPacket, const HifiSockAddr& senderSockAddr) { + auto nodeList = DependencyManager::get(); if (nodeList->packetVersionAndHashMatch(receivedPacket)) { nodeList->processNodeData(senderSockAddr, receivedPacket); } } void AudioMixer::handleMicrophoneAudioNoEchoPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { + auto nodeList = DependencyManager::get(); nodeList->findNodeAndUpdateWithDataFromPacket(packet->getData()); } void AudioMixer::handleMicrophoneAudioWithEchoPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { + auto nodeList = DependencyManager::get(); nodeList->findNodeAndUpdateWithDataFromPacket(packet->getData()); } void AudioMixer::handleInjectAudioPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { + auto nodeList = DependencyManager::get(); nodeList->findNodeAndUpdateWithDataFromPacket(packet->getData()); } void AudioMixer::handleSilentAudioFramePacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { + auto nodeList = DependencyManager::get(); nodeList->findNodeAndUpdateWithDataFromPacket(packet->getData()); } void AudioMixer::handleAudioStreamStatsPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { + auto nodeList = DependencyManager::get(); nodeList->findNodeAndUpdateWithDataFromPacket(packet->getData()); } @@ -573,14 +579,14 @@ void AudioMixer::handleMuteEnvironmentPacket(QSharedPointer packet, Hi auto nodeList = DependencyManager::get(); SharedNodePointer sendingNode = nodeList->nodeWithUUID(packet->getSourceID()); if (sendingNode->getCanAdjustLocks()) { - auto packet = NLPacket::create(PacketType::MuteEnvironment); + auto newPacket = NLPacket::create(PacketType::MuteEnvironment); // Copy payload - packet->write(receivedPacket.mid(numBytesForPacketHeader(receivedPacket))); + newPacket->write(newPacket->getPayload()); nodeList->eachNode([&](const SharedNodePointer& node){ if (node->getType() == NodeType::Agent && node->getActiveSocket() && node->getLinkedData() && node != sendingNode) { - nodeList->sendPacket(std::move(packet), node); + nodeList->sendPacket(std::move(newPacket), node); } }); } From 28f6c4021bc181147039a740b56db8ea5f28fab5 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 10 Jul 2015 17:27:56 -0700 Subject: [PATCH 04/15] Fix compilation errors in EntityServer --- assignment-client/src/entities/EntityServer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assignment-client/src/entities/EntityServer.cpp b/assignment-client/src/entities/EntityServer.cpp index c09e068b21..b7e6fe3a29 100644 --- a/assignment-client/src/entities/EntityServer.cpp +++ b/assignment-client/src/entities/EntityServer.cpp @@ -42,19 +42,19 @@ EntityServer::~EntityServer() { void EntityServer::handleEntityAddPacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) { if (_octreeInboundPacketProcessor) { - _octreeInboundPacketProcessor->queueReceivedPacket(senderNode, receivedPacket->getData()); + _octreeInboundPacketProcessor->queueReceivedPacket(senderNode, packet->getData()); } } void EntityServer::handleEntityEditPacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) { if (_octreeInboundPacketProcessor) { - _octreeInboundPacketProcessor->queueReceivedPacket(senderNode, receivedPacket->getData()); + _octreeInboundPacketProcessor->queueReceivedPacket(senderNode, packet->getData()); } } void EntityServer::handleEntityErasePacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) { if (_octreeInboundPacketProcessor) { - _octreeInboundPacketProcessor->queueReceivedPacket(senderNode, receivedPacket->getData()); + _octreeInboundPacketProcessor->queueReceivedPacket(senderNode, packet->getData()); } } From c86e481d4f380c5a0e6964bd3ef00356952d86a7 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 10 Jul 2015 17:28:27 -0700 Subject: [PATCH 05/15] Update OctreeServer packet receive handling --- assignment-client/src/octree/OctreeServer.cpp | 38 ++++++++----------- assignment-client/src/octree/OctreeServer.h | 6 +-- 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/assignment-client/src/octree/OctreeServer.cpp b/assignment-client/src/octree/OctreeServer.cpp index 55d6f0be81..2488c92439 100644 --- a/assignment-client/src/octree/OctreeServer.cpp +++ b/assignment-client/src/octree/OctreeServer.cpp @@ -248,10 +248,10 @@ OctreeServer::OctreeServer(const QByteArray& packet) : 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"); + auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); + packetReceiver.registerPacketListener(getMyQueryMessageType(), this, "handleOctreeQueryPacket"); + packetReceiver.registerPacketListener(PacketType::OctreeDataNack, this, "handleOctreeDataNackPacket"); + packetReceiver.registerPacketListener(PacketType::JurisdictionRequest, this, "handleJurisdictionRequestPacket"); } OctreeServer::~OctreeServer() { @@ -860,35 +860,29 @@ void OctreeServer::readPendingDatagram(const QByteArray& receivedPacket, const H } } -void handleOctreeQueryPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { +void OctreeServer::handleOctreeQueryPacket(QSharedPointer packet, SharedNodePointer senderNode, 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()); + auto nodeList = DependencyManager::get(); + nodeList->updateNodeWithDataFromPacket(senderNode, packet->getData()); - OctreeQueryNode* nodeData = (OctreeQueryNode*) matchingNode->getLinkedData(); - if (nodeData && !nodeData->isOctreeSendThreadInitalized()) { - nodeData->initializeOctreeSendThread(this, matchingNode); - } + OctreeQueryNode* nodeData = (OctreeQueryNode*)senderNode->getLinkedData(); + if (nodeData && !nodeData->isOctreeSendThreadInitalized()) { + nodeData->initializeOctreeSendThread(this, senderNode); } } -void handleOctreeDataNackPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { +void OctreeServer::handleOctreeDataNackPacket(QSharedPointer packet, SharedNodePointer senderNode, 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()); - } + OctreeQueryNode* nodeData = (OctreeQueryNode*)senderNode->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::handleJurisdictionRequestPacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) { + _jurisdictionSender->queueReceivedPacket(senderNode, packet->getData()); } void OctreeServer::setupDatagramProcessingThread() { diff --git a/assignment-client/src/octree/OctreeServer.h b/assignment-client/src/octree/OctreeServer.h index d25ef3183b..df36580f57 100644 --- a/assignment-client/src/octree/OctreeServer.h +++ b/assignment-client/src/octree/OctreeServer.h @@ -129,9 +129,9 @@ public slots: 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); + void handleOctreeQueryPacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr); + void handleOctreeDataNackPacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr); + void handleJurisdictionRequestPacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr); protected: virtual Octree* createTree() = 0; From ed3b8afbd9f044e4d781241b41aaeec6df1fd54c Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 10 Jul 2015 18:09:08 -0700 Subject: [PATCH 06/15] Update AssignmentClientMonitor to use PacketReceiver --- .../src/AssignmentClientMonitor.cpp | 84 +++++++------------ .../src/AssignmentClientMonitor.h | 3 +- 2 files changed, 32 insertions(+), 55 deletions(-) diff --git a/assignment-client/src/AssignmentClientMonitor.cpp b/assignment-client/src/AssignmentClientMonitor.cpp index 6796c122dc..954cf84df9 100644 --- a/assignment-client/src/AssignmentClientMonitor.cpp +++ b/assignment-client/src/AssignmentClientMonitor.cpp @@ -53,7 +53,9 @@ AssignmentClientMonitor::AssignmentClientMonitor(const unsigned int numAssignmen auto addressManager = DependencyManager::set(); auto nodeList = DependencyManager::set(); - connect(&nodeList->getNodeSocket(), &QUdpSocket::readyRead, this, &AssignmentClientMonitor::readPendingDatagrams); + auto packetReceiver = DependencyManager::get()->getPacketReceiver(); + packetReceiver->registerPacketListener(PacketType::NodeJsonStats, this, "handleNodeJsonStatsPacket"); + packetReceiver->registerPacketListener(PacketType::NodeJsonStats, this, "handleNodeJsonStatsUnknownNodePacket"); // use QProcess to fork off a process for each of the child assignment clients for (unsigned int i = 0; i < _numAssignmentClientForks; i++) { @@ -201,63 +203,37 @@ void AssignmentClientMonitor::checkSpares() { } } +void AssignmentClientMonitor::handleNodeJsonStatsPacket(QSharedPointer packet, SharedNodePointer senderNode) { + // update our records about how to reach this child + senderNode->setLocalSocket(senderSockAddr); -void AssignmentClientMonitor::readPendingDatagrams() { - auto nodeList = DependencyManager::get(); + QVariantMap packetVariantMap = JSONBreakableMarshal::fromStringBuffer(packet->getPayload()); + QJsonObject unpackedStatsJSON = QJsonObject::fromVariantMap(packetVariantMap); - QByteArray receivedPacket; - HifiSockAddr senderSockAddr; + // get child's assignment type out of the decoded json + QString childType = unpackedStatsJSON["assignment_type"].toString(); + AssignmentClientChildData *childData = + static_cast(matchingNode->getLinkedData()); + childData->setChildType(childType); + // note when this child talked + matchingNode->setLastHeardMicrostamp(usecTimestampNow()); +} - while (nodeList->getNodeSocket().hasPendingDatagrams()) { - receivedPacket.resize(nodeList->getNodeSocket().pendingDatagramSize()); - nodeList->getNodeSocket().readDatagram(receivedPacket.data(), receivedPacket.size(), - senderSockAddr.getAddressPointer(), senderSockAddr.getPortPointer()); +void AssignmentClientMonitor::handleNodeJsonStatsUnknownNodePacket(QSharedPointer packet, SharedNodePointer senderNode) { + // The parent only expects to be talking with prorams running on this same machine. + if (senderSockAddr.getAddress() == QHostAddress::LocalHost || + senderSockAddr.getAddress() == QHostAddress::LocalHostIPv6) { + if (!packetUUID.isNull()) { + matchingNode = DependencyManager::get()->addOrUpdateNode + (packetUUID, NodeType::Unassigned, senderSockAddr, senderSockAddr, false, false); + AssignmentClientChildData *childData = new AssignmentClientChildData("unknown"); + matchingNode->setLinkedData(childData); + } else { + // tell unknown assignment-client child to exit. + qDebug() << "asking unknown child to exit."; - if (nodeList->packetVersionAndHashMatch(receivedPacket)) { - if (packetTypeForPacket(receivedPacket) == PacketType::NodeJsonStats) { - QUuid packetUUID = uuidFromPacketHeader(receivedPacket); - SharedNodePointer matchingNode = nodeList->sendingNodeForPacket(receivedPacket); - if (!matchingNode) { - // The parent only expects to be talking with prorams running on this same machine. - if (senderSockAddr.getAddress() == QHostAddress::LocalHost || - senderSockAddr.getAddress() == QHostAddress::LocalHostIPv6) { - if (!packetUUID.isNull()) { - matchingNode = DependencyManager::get()->addOrUpdateNode - (packetUUID, NodeType::Unassigned, senderSockAddr, senderSockAddr, false, false); - AssignmentClientChildData *childData = new AssignmentClientChildData("unknown"); - matchingNode->setLinkedData(childData); - } else { - // tell unknown assignment-client child to exit. - qDebug() << "asking unknown child to exit."; - - auto diePacket = NLPacket::create(PacketType::StopNode, 0); - nodeList->sendPacket(std::move(diePacket), senderSockAddr); - } - } - } - - if (matchingNode) { - // update our records about how to reach this child - matchingNode->setLocalSocket(senderSockAddr); - - QVariantMap packetVariantMap = - JSONBreakableMarshal::fromStringBuffer(receivedPacket.mid(numBytesForPacketHeader(receivedPacket))); - QJsonObject unpackedStatsJSON = QJsonObject::fromVariantMap(packetVariantMap); - - // get child's assignment type out of the decoded json - QString childType = unpackedStatsJSON["assignment_type"].toString(); - AssignmentClientChildData *childData = - static_cast(matchingNode->getLinkedData()); - childData->setChildType(childType); - // note when this child talked - matchingNode->setLastHeardMicrostamp(usecTimestampNow()); - } - } else { - // have the NodeList attempt to handle it - nodeList->processNodeData(senderSockAddr, receivedPacket); - } + auto diePacket = NLPacket::create(PacketType::StopNode, 0); + nodeList->sendPacket(std::move(diePacket), senderSockAddr); } } } - - diff --git a/assignment-client/src/AssignmentClientMonitor.h b/assignment-client/src/AssignmentClientMonitor.h index f05ed3e661..0c2b958f5c 100644 --- a/assignment-client/src/AssignmentClientMonitor.h +++ b/assignment-client/src/AssignmentClientMonitor.h @@ -35,9 +35,10 @@ public: void stopChildProcesses(); private slots: - void readPendingDatagrams(); void checkSpares(); void childProcessFinished(); + void handleNodeJsonStatsPacket(QSharedPointer packet, SharedNodePointer senderNode); + void handleNodeJsonStatsUnknownNodePacket(QSharedPointer packet, SharedNodePointer senderNode); public slots: void aboutToQuit(); From 879b880254f235d42687a397a9b0679de2b3a182 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 13 Jul 2015 08:30:13 -0700 Subject: [PATCH 07/15] Fix non-ref var to PacketReceiver --- assignment-client/src/AssignmentClientMonitor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assignment-client/src/AssignmentClientMonitor.cpp b/assignment-client/src/AssignmentClientMonitor.cpp index 954cf84df9..4d892923e4 100644 --- a/assignment-client/src/AssignmentClientMonitor.cpp +++ b/assignment-client/src/AssignmentClientMonitor.cpp @@ -53,7 +53,7 @@ AssignmentClientMonitor::AssignmentClientMonitor(const unsigned int numAssignmen auto addressManager = DependencyManager::set(); auto nodeList = DependencyManager::set(); - auto packetReceiver = DependencyManager::get()->getPacketReceiver(); + auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); packetReceiver->registerPacketListener(PacketType::NodeJsonStats, this, "handleNodeJsonStatsPacket"); packetReceiver->registerPacketListener(PacketType::NodeJsonStats, this, "handleNodeJsonStatsUnknownNodePacket"); From 582de1491736a68a02ab7d6751fbaf1ded53385d Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 13 Jul 2015 09:25:57 -0700 Subject: [PATCH 08/15] Fix compilation errors in AssignmentClientMonitor --- .../src/AssignmentClientMonitor.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/assignment-client/src/AssignmentClientMonitor.cpp b/assignment-client/src/AssignmentClientMonitor.cpp index 4d892923e4..5498322f58 100644 --- a/assignment-client/src/AssignmentClientMonitor.cpp +++ b/assignment-client/src/AssignmentClientMonitor.cpp @@ -54,8 +54,8 @@ AssignmentClientMonitor::AssignmentClientMonitor(const unsigned int numAssignmen auto nodeList = DependencyManager::set(); auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); - packetReceiver->registerPacketListener(PacketType::NodeJsonStats, this, "handleNodeJsonStatsPacket"); - packetReceiver->registerPacketListener(PacketType::NodeJsonStats, this, "handleNodeJsonStatsUnknownNodePacket"); + packetReceiver.registerPacketListener(PacketType::NodeJsonStats, this, "handleNodeJsonStatsPacket"); + packetReceiver.registerPacketListener(PacketType::NodeJsonStats, this, "handleNodeJsonStatsUnknownNodePacket"); // use QProcess to fork off a process for each of the child assignment clients for (unsigned int i = 0; i < _numAssignmentClientForks; i++) { @@ -204,6 +204,8 @@ void AssignmentClientMonitor::checkSpares() { } void AssignmentClientMonitor::handleNodeJsonStatsPacket(QSharedPointer packet, SharedNodePointer senderNode) { + auto senderSockAddr = packet->getSenderSockAddr(); + // update our records about how to reach this child senderNode->setLocalSocket(senderSockAddr); @@ -213,26 +215,30 @@ void AssignmentClientMonitor::handleNodeJsonStatsPacket(QSharedPointer // get child's assignment type out of the decoded json QString childType = unpackedStatsJSON["assignment_type"].toString(); AssignmentClientChildData *childData = - static_cast(matchingNode->getLinkedData()); + static_cast(senderNode->getLinkedData()); childData->setChildType(childType); // note when this child talked - matchingNode->setLastHeardMicrostamp(usecTimestampNow()); + senderNode->setLastHeardMicrostamp(usecTimestampNow()); } void AssignmentClientMonitor::handleNodeJsonStatsUnknownNodePacket(QSharedPointer packet, SharedNodePointer senderNode) { + auto senderSockAddr = packet->getSenderSockAddr(); + // The parent only expects to be talking with prorams running on this same machine. if (senderSockAddr.getAddress() == QHostAddress::LocalHost || senderSockAddr.getAddress() == QHostAddress::LocalHostIPv6) { + QUuid packetUUID = uuidFromPacketHeader(QByteArray::fromRawData(packet->getData(), packet->getSizeWithHeader())); if (!packetUUID.isNull()) { - matchingNode = DependencyManager::get()->addOrUpdateNode + senderNode = DependencyManager::get()->addOrUpdateNode (packetUUID, NodeType::Unassigned, senderSockAddr, senderSockAddr, false, false); AssignmentClientChildData *childData = new AssignmentClientChildData("unknown"); - matchingNode->setLinkedData(childData); + senderNode->setLinkedData(childData); } else { // tell unknown assignment-client child to exit. qDebug() << "asking unknown child to exit."; auto diePacket = NLPacket::create(PacketType::StopNode, 0); + auto nodeList = DependencyManager::get(); nodeList->sendPacket(std::move(diePacket), senderSockAddr); } } From 26e78a79c065a61107e34320b85e5db5a1d525f3 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 13 Jul 2015 09:42:52 -0700 Subject: [PATCH 09/15] Add Packet::getSenderSockAddr --- libraries/networking/src/Packet.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libraries/networking/src/Packet.h b/libraries/networking/src/Packet.h index e9483ca1f1..6bb39d20b8 100644 --- a/libraries/networking/src/Packet.h +++ b/libraries/networking/src/Packet.h @@ -16,6 +16,7 @@ #include +#include "HifiSockAddr.h" #include "PacketHeaders.h" class Packet : public QIODevice { @@ -48,6 +49,8 @@ public: qint64 getSizeUsed() const { return _sizeUsed; } void setSizeUsed(qint64 sizeUsed) { _sizeUsed = sizeUsed; } + HifiSockAddr getSenderSockAddr() const { return HifiSockAddr(); } + // Header readers PacketType::Value readType() const; PacketVersion readVersion() const; From cdbcaf0f7f4668f2b54c2e676166825211f2c83d Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 13 Jul 2015 12:06:12 -0700 Subject: [PATCH 10/15] Fix AudioMixer compilation errors --- assignment-client/src/Agent.cpp | 47 ++++------------------ assignment-client/src/Agent.h | 1 - assignment-client/src/audio/AudioMixer.cpp | 14 +++---- 3 files changed, 13 insertions(+), 49 deletions(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 6166923832..0037f989ef 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -65,7 +65,7 @@ void Agent::handleOctreePacket(QSharedPointer packet, SharedNodePointe if (packetType == PacketType::OctreeStats) { - int statsMessageLength = OctreeHeadlessViewer::parseOctreeStats(mutablePacket, senderNode); + int statsMessageLength = OctreeHeadlessViewer::parseOctreeStats(packet, senderNode); if (messageLength > statsMessageLength) { mutablePacket = mutablePacket.mid(statsMessageLength); } else { @@ -80,49 +80,16 @@ void Agent::handleOctreePacket(QSharedPointer packet, SharedNodePointe } } -void Agent::readPendingDatagrams() { - QByteArray receivedPacket; - HifiSockAddr senderSockAddr; - auto nodeList = DependencyManager::get(); - - while (readAvailableDatagram(receivedPacket, senderSockAddr)) { - if (nodeList->packetVersionAndHashMatch(receivedPacket)) { - PacketType::Value datagramPacketType = packetTypeForPacket(receivedPacket); - - if (datagramPacketType == PacketType::Jurisdiction) { - int headerBytes = numBytesForPacketHeader(receivedPacket); - - SharedNodePointer matchedNode = nodeList->sendingNodeForPacket(receivedPacket); - - if (matchedNode) { - // PacketType_JURISDICTION, first byte is the node type... - switch (receivedPacket[headerBytes]) { - case NodeType::EntityServer: - DependencyManager::get()->getJurisdictionListener()-> - queueReceivedPacket(matchedNode, receivedPacket); - break; - } - } - } - } - } -} - void Agent::handleJurisdictionPacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) { QByteArray receivedPacket = QByteArray::fromRawData(packet->getData(), packet->getSizeWithHeader()); int headerBytes = numBytesForPacketHeader(receivedPacket); - auto nodeList = DependencyManager::get(); - SharedNodePointer matchedNode = nodeList->sendingNodeForPacket(receivedPacket); - - if (matchedNode) { - // PacketType_JURISDICTION, first byte is the node type... - switch (receivedPacket[headerBytes]) { - case NodeType::EntityServer: - DependencyManager::get()->getJurisdictionListener()-> - queueReceivedPacket(senderNode, receivedPacket); - break; - } + // PacketType_JURISDICTION, first byte is the node type... + switch (receivedPacket[headerBytes]) { + case NodeType::EntityServer: + DependencyManager::get()->getJurisdictionListener()-> + queueReceivedPacket(packet, senderNode); + break; } } diff --git a/assignment-client/src/Agent.h b/assignment-client/src/Agent.h index 70e1913b54..3e202f2d0d 100644 --- a/assignment-client/src/Agent.h +++ b/assignment-client/src/Agent.h @@ -52,7 +52,6 @@ public: public slots: void run(); - void readPendingDatagrams(); void playAvatarSound(Sound* avatarSound) { _scriptEngine.setAvatarSound(avatarSound); } private slots: diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index dc790e99f4..d8c01dafcd 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -545,34 +545,32 @@ void AudioMixer::sendAudioEnvironmentPacket(SharedNodePointer node) { void AudioMixer::readPendingDatagram(const QByteArray& receivedPacket, const HifiSockAddr& senderSockAddr) { auto nodeList = DependencyManager::get(); - if (nodeList->packetVersionAndHashMatch(receivedPacket)) { - nodeList->processNodeData(senderSockAddr, receivedPacket); - } + nodeList->processNodeData(senderSockAddr, receivedPacket); } void AudioMixer::handleMicrophoneAudioNoEchoPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { auto nodeList = DependencyManager::get(); - nodeList->findNodeAndUpdateWithDataFromPacket(packet->getData()); + nodeList->findNodeAndUpdateWithDataFromPacket(packet); } void AudioMixer::handleMicrophoneAudioWithEchoPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { auto nodeList = DependencyManager::get(); - nodeList->findNodeAndUpdateWithDataFromPacket(packet->getData()); + nodeList->findNodeAndUpdateWithDataFromPacket(packet); } void AudioMixer::handleInjectAudioPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { auto nodeList = DependencyManager::get(); - nodeList->findNodeAndUpdateWithDataFromPacket(packet->getData()); + nodeList->findNodeAndUpdateWithDataFromPacket(packet); } void AudioMixer::handleSilentAudioFramePacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { auto nodeList = DependencyManager::get(); - nodeList->findNodeAndUpdateWithDataFromPacket(packet->getData()); + nodeList->findNodeAndUpdateWithDataFromPacket(packet); } void AudioMixer::handleAudioStreamStatsPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { auto nodeList = DependencyManager::get(); - nodeList->findNodeAndUpdateWithDataFromPacket(packet->getData()); + nodeList->findNodeAndUpdateWithDataFromPacket(packet); } void AudioMixer::handleMuteEnvironmentPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { From 9a977149a4652a425fb8e016f26192646212c6c2 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 13 Jul 2015 12:06:32 -0700 Subject: [PATCH 11/15] Update AvatarMixer to use packetReceiver --- assignment-client/src/avatars/AvatarMixer.cpp | 88 ++++++++----------- assignment-client/src/avatars/AvatarMixer.h | 8 +- 2 files changed, 42 insertions(+), 54 deletions(-) diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index 0d4e5b5934..3559793ff5 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -46,6 +46,12 @@ AvatarMixer::AvatarMixer(const QByteArray& packet) : { // make sure we hear about node kills so we can tell the other nodes connect(DependencyManager::get().data(), &NodeList::nodeKilled, this, &AvatarMixer::nodeKilled); + + auto& packetReceiver = DependencyManager::get()->getPacketReceiver(); + packetReceiver.registerPacketListener(PacketType::AvatarData, this, "handleAvatarDataPacket"); + packetReceiver.registerPacketListener(PacketType::AvatarIdentity, this, "handleAvatarIdentityPacket"); + packetReceiver.registerPacketListener(PacketType::AvatarBillboard, this, "handleAvatarBillboardPacket"); + packetReceiver.registerPacketListener(PacketType::KillAvatar, this, "handleKillAvatarPacket"); } AvatarMixer::~AvatarMixer() { @@ -394,65 +400,43 @@ void AvatarMixer::nodeKilled(SharedNodePointer killedNode) { } } -void AvatarMixer::readPendingDatagrams() { - QByteArray receivedPacket; - HifiSockAddr senderSockAddr; - +void AvatarMixer::handleAvatarDataPacket(QSharedPointer packet, SharedNodePointer senderNode) { auto nodeList = DependencyManager::get(); + nodeList->findNodeAndUpdateWithDataFromPacket(packet); +} - while (readAvailableDatagram(receivedPacket, senderSockAddr)) { - if (nodeList->packetVersionAndHashMatch(receivedPacket)) { - switch (packetTypeForPacket(receivedPacket)) { - case PacketType::AvatarData: { - nodeList->findNodeAndUpdateWithDataFromPacket(receivedPacket); - break; - } - case PacketType::AvatarIdentity: { - // check if we have a matching node in our list - SharedNodePointer avatarNode = nodeList->sendingNodeForPacket(receivedPacket); +void AvatarMixer::handleAvatarIdentityPacket(QSharedPointer packet, SharedNodePointer senderNode) { + if (senderNode->getLinkedData()) { + AvatarMixerClientData* nodeData = reinterpret_cast(senderNode->getLinkedData()); + AvatarData& avatar = nodeData->getAvatar(); - if (avatarNode && avatarNode->getLinkedData()) { - AvatarMixerClientData* nodeData = reinterpret_cast(avatarNode->getLinkedData()); - AvatarData& avatar = nodeData->getAvatar(); - - // parse the identity packet and update the change timestamp if appropriate - if (avatar.hasIdentityChangedAfterParsing(receivedPacket)) { - QMutexLocker nodeDataLocker(&nodeData->getMutex()); - nodeData->setIdentityChangeTimestamp(QDateTime::currentMSecsSinceEpoch()); - } - } - break; - } - case PacketType::AvatarBillboard: { - // check if we have a matching node in our list - SharedNodePointer avatarNode = nodeList->sendingNodeForPacket(receivedPacket); - - if (avatarNode && avatarNode->getLinkedData()) { - AvatarMixerClientData* nodeData = static_cast(avatarNode->getLinkedData()); - AvatarData& avatar = nodeData->getAvatar(); - - // parse the billboard packet and update the change timestamp if appropriate - if (avatar.hasBillboardChangedAfterParsing(receivedPacket)) { - QMutexLocker nodeDataLocker(&nodeData->getMutex()); - nodeData->setBillboardChangeTimestamp(QDateTime::currentMSecsSinceEpoch()); - } - - } - break; - } - case PacketType::KillAvatar: { - nodeList->processKillNode(receivedPacket); - break; - } - default: - // hand this off to the NodeList - nodeList->processNodeData(senderSockAddr, receivedPacket); - break; - } + // parse the identity packet and update the change timestamp if appropriate + if (avatar.hasIdentityChangedAfterParsing(*packet)) { + QMutexLocker nodeDataLocker(&nodeData->getMutex()); + nodeData->setIdentityChangeTimestamp(QDateTime::currentMSecsSinceEpoch()); } } } +void AvatarMixer::handleAvatarBillboardPacket(QSharedPointer packet, SharedNodePointer senderNode) { + if (senderNode->getLinkedData()) { + AvatarMixerClientData* nodeData = static_cast(senderNode->getLinkedData()); + AvatarData& avatar = nodeData->getAvatar(); + + // parse the billboard packet and update the change timestamp if appropriate + if (avatar.hasBillboardChangedAfterParsing(*packet)) { + QMutexLocker nodeDataLocker(&nodeData->getMutex()); + nodeData->setBillboardChangeTimestamp(QDateTime::currentMSecsSinceEpoch()); + } + + } +} + +void AvatarMixer::handleKillAvatarPacket(QSharedPointer packet, SharedNodePointer senderNode) { + auto nodeList = DependencyManager::get(); + nodeList->processKillNode(*packet); +} + void AvatarMixer::sendStatsPacket() { QJsonObject statsObject; statsObject["average_listeners_last_second"] = (float) _sumListeners / (float) _numStatFrames; diff --git a/assignment-client/src/avatars/AvatarMixer.h b/assignment-client/src/avatars/AvatarMixer.h index 7505c4324e..90473f754f 100644 --- a/assignment-client/src/avatars/AvatarMixer.h +++ b/assignment-client/src/avatars/AvatarMixer.h @@ -29,9 +29,13 @@ public slots: void nodeAdded(SharedNodePointer nodeAdded); void nodeKilled(SharedNodePointer killedNode); - void readPendingDatagrams(); - void sendStatsPacket(); + +private slots: + void handleAvatarDataPacket(QSharedPointer packet, SharedNodePointer senderNode); + void handleAvatarIdentityPacket(QSharedPointer packet, SharedNodePointer senderNode); + void handleAvatarBillboardPacket(QSharedPointer packet, SharedNodePointer senderNode); + void handleKillAvatarPacket(QSharedPointer packet, SharedNodePointer senderNode); private: void broadcastAvatarData(); From 591c5d4b6084607f1b8218d14edcbae0077e5c4e Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 13 Jul 2015 12:06:43 -0700 Subject: [PATCH 12/15] Fix EntityServer compilation errors --- assignment-client/src/entities/EntityServer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assignment-client/src/entities/EntityServer.cpp b/assignment-client/src/entities/EntityServer.cpp index b7e6fe3a29..bdd619ccf1 100644 --- a/assignment-client/src/entities/EntityServer.cpp +++ b/assignment-client/src/entities/EntityServer.cpp @@ -42,19 +42,19 @@ EntityServer::~EntityServer() { void EntityServer::handleEntityAddPacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) { if (_octreeInboundPacketProcessor) { - _octreeInboundPacketProcessor->queueReceivedPacket(senderNode, packet->getData()); + _octreeInboundPacketProcessor->queueReceivedPacket(packet, senderNode); } } void EntityServer::handleEntityEditPacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) { if (_octreeInboundPacketProcessor) { - _octreeInboundPacketProcessor->queueReceivedPacket(senderNode, packet->getData()); + _octreeInboundPacketProcessor->queueReceivedPacket(packet, senderNode); } } void EntityServer::handleEntityErasePacket(QSharedPointer packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) { if (_octreeInboundPacketProcessor) { - _octreeInboundPacketProcessor->queueReceivedPacket(senderNode, packet->getData()); + _octreeInboundPacketProcessor->queueReceivedPacket(packet, senderNode); } } From 6a7cd7417c8aa3eb37346e42aa28308c78a24f1c Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 13 Jul 2015 12:07:01 -0700 Subject: [PATCH 13/15] Update AvatarData packet processing to work with NLPacket --- libraries/avatars/src/AvatarData.cpp | 9 ++++----- libraries/avatars/src/AvatarData.h | 5 +++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 5ea3b4c669..1afb92ef9a 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -867,9 +867,8 @@ void AvatarData::clearJointsData() { } } -bool AvatarData::hasIdentityChangedAfterParsing(const QByteArray &packet) { - QDataStream packetStream(packet); - packetStream.skipRawData(numBytesForPacketHeader(packet)); +bool AvatarData::hasIdentityChangedAfterParsing(NLPacket& packet) { + QDataStream packetStream(&packet); QUuid avatarUUID; QUrl faceModelURL, skeletonModelURL; @@ -911,8 +910,8 @@ QByteArray AvatarData::identityByteArray() { return identityData; } -bool AvatarData::hasBillboardChangedAfterParsing(const QByteArray& packet) { - QByteArray newBillboard = packet.mid(numBytesForPacketHeader(packet)); +bool AvatarData::hasBillboardChangedAfterParsing(NLPacket& packet) { + QByteArray newBillboard = QByteArray(packet.getPayload()); if (newBillboard == _billboard) { return false; } diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index c482f52bf1..c826fd9f0e 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -47,6 +47,7 @@ typedef unsigned long long quint64; #include #include +#include #include #include #include @@ -260,10 +261,10 @@ public: return false; } - bool hasIdentityChangedAfterParsing(const QByteArray& packet); + bool hasIdentityChangedAfterParsing(NLPacket& packet); QByteArray identityByteArray(); - bool hasBillboardChangedAfterParsing(const QByteArray& packet); + bool hasBillboardChangedAfterParsing(NLPacket& packet); const QUrl& getFaceModelURL() const { return _faceModelURL; } QString getFaceModelURLString() const { return _faceModelURL.toString(); } From 2efa2877dacce6ecccb98a9fadfe75956200ea9c Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 13 Jul 2015 12:07:21 -0700 Subject: [PATCH 14/15] Update LimitedNodeList::processKillNode to work with NLPacket --- libraries/networking/src/LimitedNodeList.cpp | 4 ++++ libraries/networking/src/LimitedNodeList.h | 1 + 2 files changed, 5 insertions(+) diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index 764a9eed7e..20b62a490e 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -308,6 +308,10 @@ void LimitedNodeList::killNodeWithUUID(const QUuid& nodeUUID) { } } +void LimitedNodeList::processKillNode(NLPacket& packet) { + processKillNode(QByteArray::fromRawData(packet.getData(), packet.getSizeWithHeader())); +} + void LimitedNodeList::processKillNode(const QByteArray& dataByteArray) { // read the node id QUuid nodeUUID = QUuid::fromRfc4122(dataByteArray.mid(numBytesForPacketHeader(dataByteArray), NUM_BYTES_RFC4122_UUID)); diff --git a/libraries/networking/src/LimitedNodeList.h b/libraries/networking/src/LimitedNodeList.h index f48f2aaa31..770da8f876 100644 --- a/libraries/networking/src/LimitedNodeList.h +++ b/libraries/networking/src/LimitedNodeList.h @@ -157,6 +157,7 @@ public: const HifiSockAddr& getLocalSockAddr() const { return _localSockAddr; } const HifiSockAddr& getSTUNSockAddr() const { return _stunSockAddr; } + void processKillNode(NLPacket& packet); void processKillNode(const QByteArray& datagram); int updateNodeWithDataFromPacket(const SharedNodePointer& matchingNode, QSharedPointer packet); From 9de6828b032b71e8ccb743643708e9ec0b02f8b4 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 13 Jul 2015 14:24:06 -0700 Subject: [PATCH 15/15] Remove readPendingDatagram from AudioMixer --- assignment-client/src/audio/AudioMixer.cpp | 27 ---------------------- assignment-client/src/audio/AudioMixer.h | 2 -- 2 files changed, 29 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index d8c01dafcd..018f946771 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -543,11 +543,6 @@ void AudioMixer::sendAudioEnvironmentPacket(SharedNodePointer node) { } } -void AudioMixer::readPendingDatagram(const QByteArray& receivedPacket, const HifiSockAddr& senderSockAddr) { - auto nodeList = DependencyManager::get(); - nodeList->processNodeData(senderSockAddr, receivedPacket); -} - void AudioMixer::handleMicrophoneAudioNoEchoPacket(QSharedPointer packet, HifiSockAddr senderSockAddr) { auto nodeList = DependencyManager::get(); nodeList->findNodeAndUpdateWithDataFromPacket(packet); @@ -684,28 +679,6 @@ void AudioMixer::run() { _datagramProcessingThread = new QThread(this); _datagramProcessingThread->setObjectName("Datagram Processor Thread"); - // create an AudioMixerDatagramProcessor and move it to that thread - AudioMixerDatagramProcessor* datagramProcessor = new AudioMixerDatagramProcessor(nodeList->getNodeSocket(), thread()); - datagramProcessor->moveToThread(_datagramProcessingThread); - - // remove the NodeList as the parent of the node socket - nodeList->getNodeSocket().setParent(NULL); - nodeList->getNodeSocket().moveToThread(_datagramProcessingThread); - - // let the datagram processor handle readyRead from node socket - connect(&nodeList->getNodeSocket(), &QUdpSocket::readyRead, - datagramProcessor, &AudioMixerDatagramProcessor::readPendingDatagrams); - - // connect to the datagram processing thread signal that tells us we have to handle a packet - connect(datagramProcessor, &AudioMixerDatagramProcessor::packetRequiresProcessing, this, &AudioMixer::readPendingDatagram); - - // delete the datagram processor and the associated thread when the QThread quits - connect(_datagramProcessingThread, &QThread::finished, datagramProcessor, &QObject::deleteLater); - connect(datagramProcessor, &QObject::destroyed, _datagramProcessingThread, &QThread::deleteLater); - - // start the datagram processing thread - _datagramProcessingThread->start(); - nodeList->addNodeTypeToInterestSet(NodeType::Agent); nodeList->linkedDataCreateCallback = [](Node* node) { diff --git a/assignment-client/src/audio/AudioMixer.h b/assignment-client/src/audio/AudioMixer.h index c88c5a6242..50ec3c6d18 100644 --- a/assignment-client/src/audio/AudioMixer.h +++ b/assignment-client/src/audio/AudioMixer.h @@ -35,8 +35,6 @@ public slots: /// threaded run of assignment void run(); - void readPendingDatagram(const QByteArray& receivedPacket, const HifiSockAddr& senderSockAddr); - void sendStatsPacket(); static const InboundAudioStream::Settings& getStreamSettings() { return _streamSettings; }