mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 14:08:51 +02:00
comment and naming cleanup
This commit is contained in:
parent
3d8a323fae
commit
443b54d931
4 changed files with 47 additions and 34 deletions
|
@ -184,42 +184,47 @@ void AvatarMixerClientData::processSetTraitsMessage(ReceivedMessage& message,
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarMixerClientData::processBulkAvatarTraitsAckMessage(ReceivedMessage& message) {
|
void AvatarMixerClientData::processBulkAvatarTraitsAckMessage(ReceivedMessage& message) {
|
||||||
|
// Avatar Traits flow control marks each outgoing avatar traits packet with a
|
||||||
|
// sequence number. The mixer caches the traits sent in the traits packet.
|
||||||
|
// Until an ack with the sequence number comes back, all updates to _traits
|
||||||
|
// in that packet_ are ignored. Updates to traits not in that packet will
|
||||||
|
// be sent.
|
||||||
|
|
||||||
// Look up the avatar/trait data associated with this ack and update the 'last ack' list
|
// Look up the avatar/trait data associated with this ack and update the 'last ack' list
|
||||||
// with it.
|
// with it.
|
||||||
AvatarTraits::TraitMessageSequence seq;
|
AvatarTraits::TraitMessageSequence seq;
|
||||||
message.readPrimitive(&seq);
|
message.readPrimitive(&seq);
|
||||||
auto sentAvatarTraitVersions = _pendingTraitVersions.find(seq);
|
auto sentAvatarTraitVersions = _perNodePendingTraitVersions.find(seq);
|
||||||
if (sentAvatarTraitVersions != _pendingTraitVersions.end()) {
|
if (sentAvatarTraitVersions != _perNodePendingTraitVersions.end()) {
|
||||||
// Note, this is not a simple move of the pending traits
|
for (auto& perNodeTraitVersions : sentAvatarTraitVersions->second) {
|
||||||
// to the acked traits. Instead, it's a copy where existing
|
auto& nodeId = perNodeTraitVersions.first;
|
||||||
// trait versions in the acked hash are retained for traits not
|
auto& traitVersions = perNodeTraitVersions.second;
|
||||||
// included in the pending hash
|
// For each trait that was sent in the traits packet,
|
||||||
for (auto& nodeTraitVersions : sentAvatarTraitVersions->second) {
|
// update the 'acked' trait version. Traits not
|
||||||
auto& nodeId = nodeTraitVersions.first;
|
// sent in the traits packet keep their version.
|
||||||
auto& versions = nodeTraitVersions.second;
|
|
||||||
auto simpleReceivedIt = versions.simpleCBegin();
|
// process simple traits
|
||||||
while (simpleReceivedIt != versions.simpleCEnd()) {
|
auto simpleReceivedIt = traitVersions.simpleCBegin();
|
||||||
auto traitType = static_cast<AvatarTraits::TraitType>(std::distance(versions.simpleCBegin(), simpleReceivedIt));
|
while (simpleReceivedIt != traitVersions.simpleCEnd()) {
|
||||||
_ackedTraitVersions[nodeId][traitType] = *simpleReceivedIt;
|
auto traitType = static_cast<AvatarTraits::TraitType>(std::distance(traitVersions.simpleCBegin(), simpleReceivedIt));
|
||||||
|
_perNodeAckedTraitVersions[nodeId][traitType] = *simpleReceivedIt;
|
||||||
simpleReceivedIt++;
|
simpleReceivedIt++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// enumerate the sent instanced trait versions
|
// process instanced traits
|
||||||
auto instancedSentIt = versions.instancedCBegin();
|
auto instancedSentIt = traitVersions.instancedCBegin();
|
||||||
while (instancedSentIt != versions.instancedCEnd()) {
|
while (instancedSentIt != traitVersions.instancedCEnd()) {
|
||||||
auto traitType = instancedSentIt->traitType;
|
auto traitType = instancedSentIt->traitType;
|
||||||
// get or create the sent trait versions for this trait type
|
|
||||||
|
|
||||||
// enumerate each sent instance
|
|
||||||
for (auto& sentInstance : instancedSentIt->instances) {
|
for (auto& sentInstance : instancedSentIt->instances) {
|
||||||
auto instanceID = sentInstance.id;
|
auto instanceID = sentInstance.id;
|
||||||
const auto sentVersion = sentInstance.value;
|
const auto sentVersion = sentInstance.value;
|
||||||
_ackedTraitVersions[nodeId].instanceInsert(traitType, instanceID, sentVersion);
|
_perNodeAckedTraitVersions[nodeId].instanceInsert(traitType, instanceID, sentVersion);
|
||||||
}
|
}
|
||||||
instancedSentIt++;
|
instancedSentIt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_pendingTraitVersions.erase(sentAvatarTraitVersions);
|
_perNodePendingTraitVersions.erase(sentAvatarTraitVersions);
|
||||||
} else {
|
} else {
|
||||||
// This can happen either the BulkAvatarTraits was sent with no simple traits,
|
// This can happen either the BulkAvatarTraits was sent with no simple traits,
|
||||||
// or if the avatar mixer restarts while there are pending
|
// or if the avatar mixer restarts while there are pending
|
||||||
|
@ -334,7 +339,7 @@ void AvatarMixerClientData::removeFromRadiusIgnoringSet(const QUuid& other) {
|
||||||
|
|
||||||
void AvatarMixerClientData::resetSentTraitData(Node::LocalID nodeLocalID) {
|
void AvatarMixerClientData::resetSentTraitData(Node::LocalID nodeLocalID) {
|
||||||
_lastSentTraitsTimestamps[nodeLocalID] = TraitsCheckTimestamp();
|
_lastSentTraitsTimestamps[nodeLocalID] = TraitsCheckTimestamp();
|
||||||
_sentTraitVersions[nodeLocalID].reset();
|
_perNodeSentTraitVersions[nodeLocalID].reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarMixerClientData::readViewFrustumPacket(const QByteArray& message) {
|
void AvatarMixerClientData::readViewFrustumPacket(const QByteArray& message) {
|
||||||
|
@ -390,5 +395,5 @@ void AvatarMixerClientData::cleanupKilledNode(const QUuid&, Node::LocalID nodeLo
|
||||||
removeLastBroadcastSequenceNumber(nodeLocalID);
|
removeLastBroadcastSequenceNumber(nodeLocalID);
|
||||||
removeLastBroadcastTime(nodeLocalID);
|
removeLastBroadcastTime(nodeLocalID);
|
||||||
_lastSentTraitsTimestamps.erase(nodeLocalID);
|
_lastSentTraitsTimestamps.erase(nodeLocalID);
|
||||||
_sentTraitVersions.erase(nodeLocalID);
|
_perNodeSentTraitVersions.erase(nodeLocalID);
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@ public:
|
||||||
AvatarMixerClientData(const QUuid& nodeID, Node::LocalID nodeLocalID);
|
AvatarMixerClientData(const QUuid& nodeID, Node::LocalID nodeLocalID);
|
||||||
virtual ~AvatarMixerClientData() {}
|
virtual ~AvatarMixerClientData() {}
|
||||||
using HRCTime = p_high_resolution_clock::time_point;
|
using HRCTime = p_high_resolution_clock::time_point;
|
||||||
using NodeTraitVersions = std::unordered_map<Node::LocalID, AvatarTraits::TraitVersions>;
|
using PerNodeTraitVersions = std::unordered_map<Node::LocalID, AvatarTraits::TraitVersions>;
|
||||||
|
|
||||||
int parseData(ReceivedMessage& message) override;
|
int parseData(ReceivedMessage& message) override;
|
||||||
AvatarData& getAvatar() { return *_avatar; }
|
AvatarData& getAvatar() { return *_avatar; }
|
||||||
|
@ -143,11 +143,11 @@ public:
|
||||||
AvatarTraits::TraitMessageSequence getTraitsMessageSequence() const { return _currentTraitsMessageSequence; }
|
AvatarTraits::TraitMessageSequence getTraitsMessageSequence() const { return _currentTraitsMessageSequence; }
|
||||||
AvatarTraits::TraitMessageSequence nextTraitsMessageSequence() { return ++_currentTraitsMessageSequence; }
|
AvatarTraits::TraitMessageSequence nextTraitsMessageSequence() { return ++_currentTraitsMessageSequence; }
|
||||||
AvatarTraits::TraitVersions& getPendingTraitVersions(AvatarTraits::TraitMessageSequence seq, Node::LocalID otherId) {
|
AvatarTraits::TraitVersions& getPendingTraitVersions(AvatarTraits::TraitMessageSequence seq, Node::LocalID otherId) {
|
||||||
return _pendingTraitVersions[seq][otherId];
|
return _perNodePendingTraitVersions[seq][otherId];
|
||||||
}
|
}
|
||||||
|
|
||||||
AvatarTraits::TraitVersions& getLastSentTraitVersions(Node::LocalID otherAvatar) { return _sentTraitVersions[otherAvatar]; }
|
AvatarTraits::TraitVersions& getLastSentTraitVersions(Node::LocalID otherAvatar) { return _perNodeSentTraitVersions[otherAvatar]; }
|
||||||
AvatarTraits::TraitVersions& getLastAckedTraitVersions(Node::LocalID otherAvatar) { return _ackedTraitVersions[otherAvatar]; }
|
AvatarTraits::TraitVersions& getLastAckedTraitVersions(Node::LocalID otherAvatar) { return _perNodeAckedTraitVersions[otherAvatar]; }
|
||||||
|
|
||||||
void resetSentTraitData(Node::LocalID nodeID);
|
void resetSentTraitData(Node::LocalID nodeID);
|
||||||
|
|
||||||
|
@ -194,11 +194,11 @@ private:
|
||||||
|
|
||||||
AvatarTraits::TraitMessageSequence _currentTraitsMessageSequence{ 0 };
|
AvatarTraits::TraitMessageSequence _currentTraitsMessageSequence{ 0 };
|
||||||
|
|
||||||
std::unordered_map<AvatarTraits::TraitMessageSequence, NodeTraitVersions> _pendingTraitVersions;
|
std::unordered_map<AvatarTraits::TraitMessageSequence, PerNodeTraitVersions> _perNodePendingTraitVersions;
|
||||||
|
|
||||||
std::unordered_map<Node::LocalID, TraitsCheckTimestamp> _lastSentTraitsTimestamps;
|
std::unordered_map<Node::LocalID, TraitsCheckTimestamp> _lastSentTraitsTimestamps;
|
||||||
NodeTraitVersions _sentTraitVersions;
|
PerNodeTraitVersions _perNodeSentTraitVersions;
|
||||||
NodeTraitVersions _ackedTraitVersions;
|
PerNodeTraitVersions _perNodeAckedTraitVersions;
|
||||||
|
|
||||||
std::atomic_bool _isIgnoreRadiusEnabled { false };
|
std::atomic_bool _isIgnoreRadiusEnabled { false };
|
||||||
};
|
};
|
||||||
|
|
|
@ -85,11 +85,11 @@ qint64 AvatarMixerSlave::addTraitsNodeHeader(AvatarMixerClientData* listeningNod
|
||||||
NLPacketList& traitsPacketList,
|
NLPacketList& traitsPacketList,
|
||||||
qint64 bytesWritten) {
|
qint64 bytesWritten) {
|
||||||
if (bytesWritten == 0) {
|
if (bytesWritten == 0) {
|
||||||
|
|
||||||
if (traitsPacketList.getNumPackets() == 0) {
|
if (traitsPacketList.getNumPackets() == 0) {
|
||||||
|
// This is the beginning of the traits packet, write out the sequence number.
|
||||||
bytesWritten += traitsPacketList.writePrimitive(listeningNodeData->nextTraitsMessageSequence());
|
bytesWritten += traitsPacketList.writePrimitive(listeningNodeData->nextTraitsMessageSequence());
|
||||||
}
|
}
|
||||||
// add the avatar ID to mark the beginning of traits for this avatar
|
// This is the beginning of the traits for a node, write out the node id
|
||||||
bytesWritten += traitsPacketList.write(sendingNodeData->getNodeID().toRfc4122());
|
bytesWritten += traitsPacketList.write(sendingNodeData->getNodeID().toRfc4122());
|
||||||
}
|
}
|
||||||
return bytesWritten;
|
return bytesWritten;
|
||||||
|
@ -99,6 +99,12 @@ qint64 AvatarMixerSlave::addChangedTraitsToBulkPacket(AvatarMixerClientData* lis
|
||||||
const AvatarMixerClientData* sendingNodeData,
|
const AvatarMixerClientData* sendingNodeData,
|
||||||
NLPacketList& traitsPacketList) {
|
NLPacketList& traitsPacketList) {
|
||||||
|
|
||||||
|
// Avatar Traits flow control marks each outgoing avatar traits packet with a
|
||||||
|
// sequence number. The mixer caches the traits sent in the traits packet.
|
||||||
|
// Until an ack with the sequence number comes back, all updates to _traits
|
||||||
|
// in that packet_ are ignored. Updates to traits not in that packet will
|
||||||
|
// be sent.
|
||||||
|
|
||||||
auto otherNodeLocalID = sendingNodeData->getNodeLocalID();
|
auto otherNodeLocalID = sendingNodeData->getNodeLocalID();
|
||||||
|
|
||||||
// Perform a simple check with two server clock time points
|
// Perform a simple check with two server clock time points
|
||||||
|
|
|
@ -332,13 +332,15 @@ void AvatarHashMap::processBulkAvatarTraits(QSharedPointer<ReceivedMessage> mess
|
||||||
|
|
||||||
message->readPrimitive(&seq);
|
message->readPrimitive(&seq);
|
||||||
|
|
||||||
// we have a mixer to send to, setup our set traits packet
|
|
||||||
auto traitsAckPacket = NLPacket::create(PacketType::BulkAvatarTraitsAck, sizeof(AvatarTraits::TraitMessageSequence), true);
|
auto traitsAckPacket = NLPacket::create(PacketType::BulkAvatarTraitsAck, sizeof(AvatarTraits::TraitMessageSequence), true);
|
||||||
traitsAckPacket->writePrimitive(seq);
|
traitsAckPacket->writePrimitive(seq);
|
||||||
auto nodeList = DependencyManager::get<LimitedNodeList>();
|
auto nodeList = DependencyManager::get<LimitedNodeList>();
|
||||||
SharedNodePointer avatarMixer = nodeList->soloNodeOfType(NodeType::AvatarMixer);
|
SharedNodePointer avatarMixer = nodeList->soloNodeOfType(NodeType::AvatarMixer);
|
||||||
nodeList->sendPacket(std::move(traitsAckPacket), *avatarMixer);
|
if (!avatarMixer.isNull()) {
|
||||||
|
// we have a mixer to send to, acknowledge that we received these
|
||||||
|
// traits.
|
||||||
|
nodeList->sendPacket(std::move(traitsAckPacket), *avatarMixer);
|
||||||
|
}
|
||||||
|
|
||||||
while (message->getBytesLeftToRead()) {
|
while (message->getBytesLeftToRead()) {
|
||||||
// read the avatar ID to figure out which avatar this is for
|
// read the avatar ID to figure out which avatar this is for
|
||||||
|
|
Loading…
Reference in a new issue