Only check user metadata before sending

This commit is contained in:
Zach Pomerantz 2016-06-08 18:15:34 -05:00
parent 09e0a2ced7
commit 9926c80917
4 changed files with 27 additions and 3 deletions

View file

@ -79,11 +79,11 @@ void DomainMetadata::setDescriptors(QVariantMap& settings) {
_metadata[DESCRIPTORS] = descriptors; _metadata[DESCRIPTORS] = descriptors;
#if DEV_BUILD || PR_BUILD #if DEV_BUILD || PR_BUILD
qDebug() << "Regenerated domain metadata - descriptors:" << descriptors; qDebug() << "Domain metadata descriptors set:" << descriptors;
#endif #endif
} }
void DomainMetadata::usersChanged() { void DomainMetadata::updateUsers() {
static const QString DEFAULT_HOSTNAME = "*"; static const QString DEFAULT_HOSTNAME = "*";
auto nodeList = DependencyManager::get<LimitedNodeList>(); auto nodeList = DependencyManager::get<LimitedNodeList>();
@ -119,6 +119,14 @@ void DomainMetadata::usersChanged() {
_metadata[USERS] = users; _metadata[USERS] = users;
#if DEV_BUILD || PR_BUILD #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 #endif
} }

View file

@ -11,6 +11,8 @@
#ifndef hifi_DomainMetadata_h #ifndef hifi_DomainMetadata_h
#define hifi_DomainMetadata_h #define hifi_DomainMetadata_h
#include <stdint.h>
#include <QVariantMap> #include <QVariantMap>
#include <QJsonObject> #include <QJsonObject>
@ -39,17 +41,25 @@ Q_OBJECT
public: public:
DomainMetadata(); 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 get() { return QJsonObject::fromVariantMap(_metadata); }
QJsonObject getUsers() { return QJsonObject::fromVariantMap(_metadata[USERS].toMap()); } QJsonObject getUsers() { return QJsonObject::fromVariantMap(_metadata[USERS].toMap()); }
QJsonObject getDescriptors() { return QJsonObject::fromVariantMap(_metadata[DESCRIPTORS].toMap()); } QJsonObject getDescriptors() { return QJsonObject::fromVariantMap(_metadata[DESCRIPTORS].toMap()); }
uint32_t getTic() { return _tic; }
void setDescriptors(QVariantMap& settings); void setDescriptors(QVariantMap& settings);
void updateUsers();
public slots: public slots:
void usersChanged(); void usersChanged();
protected: protected:
QVariantMap _metadata; QVariantMap _metadata;
uint32_t _tic{ 0 };
}; };
#endif // hifi_DomainMetadata_h #endif // hifi_DomainMetadata_h

View file

@ -1101,6 +1101,11 @@ void DomainServer::sendHeartbeatToMetaverse(const QString& networkAddress) {
// Add the metadata to the heartbeat // Add the metadata to the heartbeat
static const QString DOMAIN_HEARTBEAT_KEY = "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(); domainObject[DOMAIN_HEARTBEAT_KEY] = _metadata.getUsers();
QString domainUpdateJSON = QString("{\"domain\":%1}").arg(QString(QJsonDocument(domainObject).toJson(QJsonDocument::Compact))); QString domainUpdateJSON = QString("{\"domain\":%1}").arg(QString(QJsonDocument(domainObject).toJson(QJsonDocument::Compact)));

View file

@ -171,6 +171,7 @@ private:
DomainServerSettingsManager _settingsManager; DomainServerSettingsManager _settingsManager;
DomainMetadata _metadata; DomainMetadata _metadata;
uint32_t _metadataTic{ 0 };
HifiSockAddr _iceServerSocket; HifiSockAddr _iceServerSocket;
std::unique_ptr<NLPacket> _iceServerHeartbeatPacket; std::unique_ptr<NLPacket> _iceServerHeartbeatPacket;