Remove blocking call + reduce packet construction

This commit is contained in:
Atlante45 2017-06-12 16:12:13 -07:00 committed by Stephen Birarda
parent a0d107c72c
commit b4ce9fb4fc

View file

@ -68,14 +68,8 @@ void AvatarMixer::handleReplicatedPackets(QSharedPointer<ReceivedMessage> messag
auto nodeList = DependencyManager::get<NodeList>(); auto nodeList = DependencyManager::get<NodeList>();
auto nodeID = QUuid::fromRfc4122(message->readWithoutCopy(NUM_BYTES_RFC4122_UUID)); auto nodeID = QUuid::fromRfc4122(message->readWithoutCopy(NUM_BYTES_RFC4122_UUID));
auto replicatedNode = nodeList->nodeWithUUID(nodeID); auto replicatedNode = nodeList->addOrUpdateNode(nodeID, NodeType::Agent,
if (!replicatedNode) { message->getSenderSockAddr(), message->getSenderSockAddr())
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()));
}
replicatedNode->setLastHeardMicrostamp(usecTimestampNow()); replicatedNode->setLastHeardMicrostamp(usecTimestampNow());
replicatedNode->setIsUpstream(true); replicatedNode->setIsUpstream(true);
@ -117,16 +111,20 @@ void AvatarMixer::optionallyReplicatePacket(ReceivedMessage& message, const Node
return; return;
} }
std::unique_ptr<NLPacket> packet;
auto nodeList = DependencyManager::get<NodeList>(); auto nodeList = DependencyManager::get<NodeList>();
nodeList->eachMatchingNode([&](const SharedNodePointer& node) { nodeList->eachMatchingNode([&](const SharedNodePointer& node) {
return node->getType() == NodeType::ReplicantAvatarMixer; return node->getType() == NodeType::ReplicantAvatarMixer;
}, [&](const SharedNodePointer& node) { }, [&](const SharedNodePointer& node) {
// construct an NLPacket to send to the replicant that has the contents of the received packet if (!packet) {
auto packet = NLPacket::create(replicatedType, message.getSize() + NUM_BYTES_RFC4122_UUID); // construct an NLPacket to send to the replicant that has the contents of the received packet
packet->write(message.getSourceID().toRfc4122()); packet = NLPacket::create(replicatedType, message.getSize() + NUM_BYTES_RFC4122_UUID);
packet->write(message.getMessage()); packet->write(message.getSourceID().toRfc4122());
packet->write(message.getMessage());
}
nodeList->sendPacket(std::move(packet), *node); nodeList->sendUnreliablePacket(*packet, *node);
}); });
} }
} }