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); } }