From b4ce9fb4fcb732980fcce9d1d806aed1b8ba33ca Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Mon, 12 Jun 2017 16:12:13 -0700 Subject: [PATCH] Remove blocking call + reduce packet construction --- assignment-client/src/avatars/AvatarMixer.cpp | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index 2b074f71e6..75b3d23563 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -68,14 +68,8 @@ void AvatarMixer::handleReplicatedPackets(QSharedPointer messag auto nodeList = DependencyManager::get(); auto nodeID = QUuid::fromRfc4122(message->readWithoutCopy(NUM_BYTES_RFC4122_UUID)); - auto replicatedNode = nodeList->nodeWithUUID(nodeID); - if (!replicatedNode) { - QMetaObject::invokeMethod(nodeList.data(), "addOrUpdateNode", Qt::BlockingQueuedConnection, - Q_RETURN_ARG(SharedNodePointer, replicatedNode), - Q_ARG(QUuid, nodeID), Q_ARG(NodeType_t, NodeType::Agent), - Q_ARG(HifiSockAddr, message->getSenderSockAddr()), - Q_ARG(HifiSockAddr, message->getSenderSockAddr())); - } + auto replicatedNode = nodeList->addOrUpdateNode(nodeID, NodeType::Agent, + message->getSenderSockAddr(), message->getSenderSockAddr()) replicatedNode->setLastHeardMicrostamp(usecTimestampNow()); replicatedNode->setIsUpstream(true); @@ -117,16 +111,20 @@ void AvatarMixer::optionallyReplicatePacket(ReceivedMessage& message, const Node return; } + std::unique_ptr packet; + auto nodeList = DependencyManager::get(); nodeList->eachMatchingNode([&](const SharedNodePointer& node) { return node->getType() == NodeType::ReplicantAvatarMixer; }, [&](const SharedNodePointer& node) { - // construct an NLPacket to send to the replicant that has the contents of the received packet - auto packet = NLPacket::create(replicatedType, message.getSize() + NUM_BYTES_RFC4122_UUID); - packet->write(message.getSourceID().toRfc4122()); - packet->write(message.getMessage()); + if (!packet) { + // construct an NLPacket to send to the replicant that has the contents of the received packet + packet = NLPacket::create(replicatedType, message.getSize() + NUM_BYTES_RFC4122_UUID); + packet->write(message.getSourceID().toRfc4122()); + packet->write(message.getMessage()); + } - nodeList->sendPacket(std::move(packet), *node); + nodeList->sendUnreliablePacket(*packet, *node); }); } }