mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-04 05:24:35 +02:00
Remove blocking call + reduce packet construction
This commit is contained in:
parent
a0d107c72c
commit
b4ce9fb4fc
1 changed files with 11 additions and 13 deletions
|
@ -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) {
|
||||||
|
if (!packet) {
|
||||||
// construct an NLPacket to send to the replicant that has the contents of the received packet
|
// 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 = NLPacket::create(replicatedType, message.getSize() + NUM_BYTES_RFC4122_UUID);
|
||||||
packet->write(message.getSourceID().toRfc4122());
|
packet->write(message.getSourceID().toRfc4122());
|
||||||
packet->write(message.getMessage());
|
packet->write(message.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
nodeList->sendPacket(std::move(packet), *node);
|
nodeList->sendUnreliablePacket(*packet, *node);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue