From 7dd8515bd885f49472a2fc652c22f01d30bbd428 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 6 May 2016 11:50:40 -0700 Subject: [PATCH] send a simple heartbeat if location has not changed --- interface/src/DiscoverabilityManager.cpp | 31 ++++++++++++++++++------ interface/src/DiscoverabilityManager.h | 1 + 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/interface/src/DiscoverabilityManager.cpp b/interface/src/DiscoverabilityManager.cpp index db84da55de..40186de035 100644 --- a/interface/src/DiscoverabilityManager.cpp +++ b/interface/src/DiscoverabilityManager.cpp @@ -30,6 +30,7 @@ DiscoverabilityManager::DiscoverabilityManager() : } const QString API_USER_LOCATION_PATH = "/api/v1/user/location"; +const QString API_USER_HEARTBEAT_PATH = "/api/v1/user/heartbeat"; const QString SESSION_ID_KEY = "session_id"; @@ -48,7 +49,6 @@ void DiscoverabilityManager::updateLocation() { QJsonObject locationObject; - QString pathString = addressManager->currentPath(); const QString LOCATION_KEY_IN_ROOT = "location"; @@ -78,16 +78,33 @@ void DiscoverabilityManager::updateLocation() { const QString FRIENDS_ONLY_KEY_IN_LOCATION = "friends_only"; locationObject.insert(FRIENDS_ONLY_KEY_IN_LOCATION, (_mode.get() == Discoverability::Friends)); - - rootObject.insert(LOCATION_KEY_IN_ROOT, locationObject); - - accountManager.sendRequest(API_USER_LOCATION_PATH, AccountManagerAuth::Required, + + // if we have a session ID add it now, otherwise add a null value + rootObject[SESSION_ID_KEY] = _sessionID.isEmpty() ? QJsonValue() : _sessionID; + + JSONCallbackParameters callbackParameters; + callbackParameters.jsonCallbackReceiver = this; + callbackParameters.jsonCallbackMethod = "handleHeartbeatResponse"; + + // figure out if we'll send a fresh location or just a simple heartbeat + auto apiPath = API_USER_HEARTBEAT_PATH; + + if (locationObject != _lastLocationObject) { + // we have a changed location, send it now + _lastLocationObject = locationObject; + + rootObject.insert(LOCATION_KEY_IN_ROOT, locationObject); + + apiPath = API_USER_LOCATION_PATH; + } + + accountManager.sendRequest(apiPath, AccountManagerAuth::Required, QNetworkAccessManager::PutOperation, - JSONCallbackParameters(), QJsonDocument(rootObject).toJson()); + callbackParameters, QJsonDocument(rootObject).toJson()); + } } else if (UserActivityLogger::getInstance().isEnabled()) { // we still send a heartbeat to the metaverse server for stats collection - const QString API_USER_HEARTBEAT_PATH = "/api/v1/user/heartbeat"; JSONCallbackParameters callbackParameters; callbackParameters.jsonCallbackReceiver = this; diff --git a/interface/src/DiscoverabilityManager.h b/interface/src/DiscoverabilityManager.h index 94d74b81b9..9a1fa7b39c 100644 --- a/interface/src/DiscoverabilityManager.h +++ b/interface/src/DiscoverabilityManager.h @@ -50,6 +50,7 @@ private: Setting::Handle _mode; QString _sessionID; + QJsonObject _lastLocationObject; }; #endif // hifi_DiscoverabilityManager_h