diff --git a/domain-server/src/DomainMetadata.cpp b/domain-server/src/DomainMetadata.cpp index 8fdbc2bbd1..26d2bb87ce 100644 --- a/domain-server/src/DomainMetadata.cpp +++ b/domain-server/src/DomainMetadata.cpp @@ -79,11 +79,11 @@ void DomainMetadata::setDescriptors(QVariantMap& settings) { _metadata[DESCRIPTORS] = descriptors; #if DEV_BUILD || PR_BUILD - qDebug() << "Regenerated domain metadata - descriptors:" << descriptors; + qDebug() << "Domain metadata descriptors set:" << descriptors; #endif } -void DomainMetadata::usersChanged() { +void DomainMetadata::updateUsers() { static const QString DEFAULT_HOSTNAME = "*"; auto nodeList = DependencyManager::get(); @@ -119,6 +119,14 @@ void DomainMetadata::usersChanged() { _metadata[USERS] = users; #if DEV_BUILD || PR_BUILD - qDebug() << "Regenerated domain metadata - users:" << users; + qDebug() << "Domain metadata users updated:" << users; +#endif +} + +void DomainMetadata::usersChanged() { + ++_tic; + +#if DEV_BUILD || PR_BUILD + qDebug() << "Domain metadata users change detected"; #endif } diff --git a/domain-server/src/DomainMetadata.h b/domain-server/src/DomainMetadata.h index e2f4674afc..7d58d43182 100644 --- a/domain-server/src/DomainMetadata.h +++ b/domain-server/src/DomainMetadata.h @@ -11,6 +11,8 @@ #ifndef hifi_DomainMetadata_h #define hifi_DomainMetadata_h +#include + #include #include @@ -39,17 +41,25 @@ Q_OBJECT public: DomainMetadata(); + // Returns the last set metadata + // If connected users have changed, metadata may need to be updated + // this should be checked by storing tic = getTic() between calls + // and testing it for equality before the next get (tic == getTic()) QJsonObject get() { return QJsonObject::fromVariantMap(_metadata); } QJsonObject getUsers() { return QJsonObject::fromVariantMap(_metadata[USERS].toMap()); } QJsonObject getDescriptors() { return QJsonObject::fromVariantMap(_metadata[DESCRIPTORS].toMap()); } + uint32_t getTic() { return _tic; } + void setDescriptors(QVariantMap& settings); + void updateUsers(); public slots: void usersChanged(); protected: QVariantMap _metadata; + uint32_t _tic{ 0 }; }; #endif // hifi_DomainMetadata_h diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 88c4e215b2..0f5498a575 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -1101,6 +1101,11 @@ void DomainServer::sendHeartbeatToMetaverse(const QString& networkAddress) { // Add the metadata to the heartbeat static const QString DOMAIN_HEARTBEAT_KEY = "heartbeat"; + auto tic = _metadata.getTic(); + if (_metadataTic != tic) { + _metadataTic = tic; + _metadata.updateUsers(); + } domainObject[DOMAIN_HEARTBEAT_KEY] = _metadata.getUsers(); QString domainUpdateJSON = QString("{\"domain\":%1}").arg(QString(QJsonDocument(domainObject).toJson(QJsonDocument::Compact))); diff --git a/domain-server/src/DomainServer.h b/domain-server/src/DomainServer.h index acda550ce5..8b8409ff0a 100644 --- a/domain-server/src/DomainServer.h +++ b/domain-server/src/DomainServer.h @@ -171,6 +171,7 @@ private: DomainServerSettingsManager _settingsManager; DomainMetadata _metadata; + uint32_t _metadataTic{ 0 }; HifiSockAddr _iceServerSocket; std::unique_ptr _iceServerHeartbeatPacket;