From 2c0604afd10f0a4c21bb652b32c2ddfe7807bc95 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 30 Apr 2015 08:55:08 -0700 Subject: [PATCH] fix string JSON unmarshal, add basic avatar values --- assignment-client/src/avatars/AvatarMixer.cpp | 18 +++++++++++++++++- .../src/avatars/AvatarMixerClientData.cpp | 5 +++++ .../src/avatars/AvatarMixerClientData.h | 5 ++++- .../networking/src/JSONBreakableMarshal.cpp | 6 +++--- libraries/networking/src/NodeList.cpp | 2 +- 5 files changed, 30 insertions(+), 6 deletions(-) diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index ae793795ea..53806e491e 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -337,9 +337,25 @@ void AvatarMixer::sendStatsPacket() { statsObject["trailing_sleep_percentage"] = _trailingSleepRatio * 100; statsObject["performance_throttling_ratio"] = _performanceThrottlingRatio; + + QJsonObject avatarsObject; + auto nodeList = DependencyManager::get(); + // add stats for each listerner + nodeList->eachNode([&](const SharedNodePointer& node) { + QJsonObject avatarStats; + avatarStats["bytes_per_second"] = node->getOutboundBandwidth(); + AvatarMixerClientData* clientData = static_cast(node->getLinkedData()); + if (clientData) { + clientData->loadJSONStats(avatarStats); + } + + avatarsObject[uuidStringWithoutCurlyBraces(node->getUUID())] = avatarStats; + }); + + statsObject["avatars"] = avatarsObject; ThreadedAssignment::addPacketStatsAndSendStatsPacket(statsObject); - + _sumListeners = 0; _sumBillboardPackets = 0; _sumIdentityPackets = 0; diff --git a/assignment-client/src/avatars/AvatarMixerClientData.cpp b/assignment-client/src/avatars/AvatarMixerClientData.cpp index f35285124f..3999256c6b 100644 --- a/assignment-client/src/avatars/AvatarMixerClientData.cpp +++ b/assignment-client/src/avatars/AvatarMixerClientData.cpp @@ -33,3 +33,8 @@ bool AvatarMixerClientData::checkAndSetHasReceivedFirstPackets() { _hasReceivedFirstPackets = true; return oldValue; } + +void AvatarMixerClientData::loadJSONStats(QJsonObject& jsonObject) const { + jsonObject["display_name"] = _avatar.getDisplayName(); + jsonObject["full_rate_distance"] = _fullRateDistance; +} diff --git a/assignment-client/src/avatars/AvatarMixerClientData.h b/assignment-client/src/avatars/AvatarMixerClientData.h index cbc40e0b0a..346bf6a9e8 100644 --- a/assignment-client/src/avatars/AvatarMixerClientData.h +++ b/assignment-client/src/avatars/AvatarMixerClientData.h @@ -14,6 +14,7 @@ #include +#include #include #include @@ -35,7 +36,9 @@ public: quint64 getIdentityChangeTimestamp() const { return _identityChangeTimestamp; } void setIdentityChangeTimestamp(quint64 identityChangeTimestamp) { _identityChangeTimestamp = identityChangeTimestamp; } - float getFullRateDistance() const { return _fullRateDistance; } + float getFullRateDistance() const { return _fullRateDistance; } + + void loadJSONStats(QJsonObject& jsonObject) const; private: AvatarData _avatar; bool _hasReceivedFirstPackets; diff --git a/libraries/networking/src/JSONBreakableMarshal.cpp b/libraries/networking/src/JSONBreakableMarshal.cpp index 176980ffd2..6d4b66c9d9 100644 --- a/libraries/networking/src/JSONBreakableMarshal.cpp +++ b/libraries/networking/src/JSONBreakableMarshal.cpp @@ -121,10 +121,10 @@ QVariant JSONBreakableMarshal::fromString(const QString& marshalValue) { } else { // we need to figure out if this is a string // use a regex to look for surrounding quotes first - const QString JSON_STRING_REGEX = "\\A\"([\\w\\W]*)\"\\z"; + const QString JSON_STRING_REGEX = "^\"([\\s\\S]*)\"$"; QRegExp stringRegex(JSON_STRING_REGEX); - - if (stringRegex.indexIn(marshalValue)) { + + if (stringRegex.indexIn(marshalValue) != -1) { // set the result to the string value result = stringRegex.cap(1); } else { diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 04ae1b0b2b..819c46cdf0 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -73,7 +73,7 @@ qint64 NodeList::sendStats(const QJsonObject& statsObject, const HifiSockAddr& d // get a QStringList using JSONBreakableMarshal QStringList statsStringList = JSONBreakableMarshal::toStringList(statsObject, ""); - + int numBytesWritten = numBytesForPacketHeader; // enumerate the resulting strings - pack them and send off packets once we hit MTU size