Merge pull request #10785 from birarda/bug/manage-avatar-identity

push AvatarData sequence number when managing identity data for agent
This commit is contained in:
Stephen Birarda 2017-06-22 12:02:42 -07:00 committed by GitHub
commit 86b2382f7c
3 changed files with 16 additions and 8 deletions

View file

@ -331,7 +331,13 @@ void AvatarMixer::manageIdentityData(const SharedNodePointer& node) {
} }
} }
if (sendIdentity) { if (sendIdentity) {
sendIdentityPacket(nodeData, node); // Tell node whose name changed about its new session display name or avatar.
// since this packet includes a change to either the skeleton model URL or the display name
// it needs a new sequence number
nodeData->getAvatar().pushIdentitySequenceNumber();
// tell node whose name changed about its new session display name or avatar.
sendIdentityPacket(nodeData, node);
} }
} }

View file

@ -1496,13 +1496,13 @@ void AvatarData::processAvatarIdentity(const QByteArray& identityData, bool& ide
udt::SequenceNumber incomingSequenceNumber(incomingSequenceNumberType); udt::SequenceNumber incomingSequenceNumber(incomingSequenceNumberType);
if (!_hasProcessedFirstIdentity) { if (!_hasProcessedFirstIdentity) {
_lastSequenceNumber = incomingSequenceNumber - 1; _identitySequenceNumber = incomingSequenceNumber - 1;
_hasProcessedFirstIdentity = true; _hasProcessedFirstIdentity = true;
qCDebug(avatars) << "Processing first identity packet for" << avatarSessionID << "-" qCDebug(avatars) << "Processing first identity packet for" << avatarSessionID << "-"
<< (udt::SequenceNumber::Type) incomingSequenceNumber; << (udt::SequenceNumber::Type) incomingSequenceNumber;
} }
if (incomingSequenceNumber > _lastSequenceNumber) { if (incomingSequenceNumber > _identitySequenceNumber) {
Identity identity; Identity identity;
packetStream >> identity.skeletonModelURL packetStream >> identity.skeletonModelURL
@ -1512,7 +1512,7 @@ void AvatarData::processAvatarIdentity(const QByteArray& identityData, bool& ide
>> identity.avatarEntityData; >> identity.avatarEntityData;
// set the store identity sequence number to match the incoming identity // set the store identity sequence number to match the incoming identity
_lastSequenceNumber = incomingSequenceNumber; _identitySequenceNumber = incomingSequenceNumber;
if (_firstSkeletonCheck || (identity.skeletonModelURL != cannonicalSkeletonModelURL(emptyURL))) { if (_firstSkeletonCheck || (identity.skeletonModelURL != cannonicalSkeletonModelURL(emptyURL))) {
setSkeletonModelURL(identity.skeletonModelURL); setSkeletonModelURL(identity.skeletonModelURL);
@ -1555,7 +1555,7 @@ void AvatarData::processAvatarIdentity(const QByteArray& identityData, bool& ide
} else { } else {
qCDebug(avatars) << "Refusing to process identity for" << uuidStringWithoutCurlyBraces(avatarSessionID) << "since" qCDebug(avatars) << "Refusing to process identity for" << uuidStringWithoutCurlyBraces(avatarSessionID) << "since"
<< (udt::SequenceNumber::Type) _lastSequenceNumber << (udt::SequenceNumber::Type) _identitySequenceNumber
<< "is >=" << (udt::SequenceNumber::Type) incomingSequenceNumber; << "is >=" << (udt::SequenceNumber::Type) incomingSequenceNumber;
#endif #endif
} }
@ -1571,7 +1571,7 @@ QByteArray AvatarData::identityByteArray() const {
_avatarEntitiesLock.withReadLock([&] { _avatarEntitiesLock.withReadLock([&] {
identityStream << getSessionUUID() identityStream << getSessionUUID()
<< (udt::SequenceNumber::Type) _lastSequenceNumber << (udt::SequenceNumber::Type) _identitySequenceNumber
<< urlToSend << urlToSend
<< _attachmentData << _attachmentData
<< _displayName << _displayName
@ -1755,7 +1755,7 @@ void AvatarData::sendIdentityPacket() {
if (_identityDataChanged) { if (_identityDataChanged) {
// if the identity data has changed, push the sequence number forwards // if the identity data has changed, push the sequence number forwards
++_lastSequenceNumber; ++_identitySequenceNumber;
} }
QByteArray identityData = identityByteArray(); QByteArray identityData = identityByteArray();

View file

@ -625,6 +625,8 @@ public:
bool getIdentityDataChanged() const { return _identityDataChanged; } // has the identity data changed since the last time sendIdentityPacket() was called bool getIdentityDataChanged() const { return _identityDataChanged; } // has the identity data changed since the last time sendIdentityPacket() was called
void markIdentityDataChanged() { _identityDataChanged = true; } void markIdentityDataChanged() { _identityDataChanged = true; }
void pushIdentitySequenceNumber() { ++_identitySequenceNumber; };
float getDensity() const { return _density; } float getDensity() const { return _density; }
signals: signals:
@ -781,7 +783,7 @@ protected:
float _audioAverageLoudness { 0.0f }; float _audioAverageLoudness { 0.0f };
bool _identityDataChanged { false }; bool _identityDataChanged { false };
udt::SequenceNumber _lastSequenceNumber { 0 }; udt::SequenceNumber _identitySequenceNumber { 0 };
bool _hasProcessedFirstIdentity { false }; bool _hasProcessedFirstIdentity { false };
float _density; float _density;