From 6468046c6882a7aad25441b9369034f1fdcf9b80 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 14 Sep 2015 11:20:32 -0700 Subject: [PATCH] Update AssetClient callbacks to return whether a response was received --- libraries/networking/src/AssetClient.cpp | 12 ++--- libraries/networking/src/AssetClient.h | 6 +-- libraries/networking/src/AssetRequest.cpp | 58 +++++++++++++---------- libraries/networking/src/AssetUpload.cpp | 32 +++++++------ libraries/networking/src/AssetUtils.h | 3 +- 5 files changed, 62 insertions(+), 49 deletions(-) diff --git a/libraries/networking/src/AssetClient.cpp b/libraries/networking/src/AssetClient.cpp index 6a98fcbff7..298f68497e 100644 --- a/libraries/networking/src/AssetClient.cpp +++ b/libraries/networking/src/AssetClient.cpp @@ -169,7 +169,7 @@ void AssetClient::handleAssetGetInfoReply(QSharedPointer packet, Share auto requestIt = messageCallbackMap.find(messageID); if (requestIt != messageCallbackMap.end()) { auto callback = requestIt->second; - callback(error, info); + callback(true, error, info); messageCallbackMap.erase(requestIt); } @@ -212,7 +212,7 @@ void AssetClient::handleAssetGetReply(QSharedPointer packetList, S auto requestIt = messageCallbackMap.find(messageID); if (requestIt != messageCallbackMap.end()) { auto callback = requestIt->second; - callback(error, data); + callback(true, error, data); messageCallbackMap.erase(requestIt); } @@ -276,7 +276,7 @@ void AssetClient::handleAssetUploadReply(QSharedPointer packet, Shared auto requestIt = messageCallbackMap.find(messageID); if (requestIt != messageCallbackMap.end()) { auto callback = requestIt->second; - callback(error, hashString); + callback(true, error, hashString); messageCallbackMap.erase(requestIt); } @@ -290,7 +290,7 @@ void AssetClient::handleNodeKilled(SharedNodePointer node) { auto messageMapIt = _pendingRequests.find(node); if (messageMapIt != _pendingRequests.end()) { for (const auto& value : messageMapIt->second) { - value.second(AssetServerError::NetworkError, QByteArray()); + value.second(false, AssetServerError::NoError, QByteArray()); } messageMapIt->second.clear(); } @@ -301,7 +301,7 @@ void AssetClient::handleNodeKilled(SharedNodePointer node) { if (messageMapIt != _pendingInfoRequests.end()) { AssetInfo info { "", 0 }; for (const auto& value : messageMapIt->second) { - value.second(AssetServerError::NetworkError, info); + value.second(false, AssetServerError::NoError, info); } messageMapIt->second.clear(); } @@ -311,7 +311,7 @@ void AssetClient::handleNodeKilled(SharedNodePointer node) { auto messageMapIt = _pendingUploads.find(node); if (messageMapIt != _pendingUploads.end()) { for (const auto& value : messageMapIt->second) { - value.second(AssetServerError::NetworkError, ""); + value.second(false, AssetServerError::NoError, ""); } messageMapIt->second.clear(); } diff --git a/libraries/networking/src/AssetClient.h b/libraries/networking/src/AssetClient.h index 0e8e4d63eb..1f5a61dc55 100644 --- a/libraries/networking/src/AssetClient.h +++ b/libraries/networking/src/AssetClient.h @@ -30,9 +30,9 @@ struct AssetInfo { int64_t size; }; -using ReceivedAssetCallback = std::function; -using GetInfoCallback = std::function; -using UploadResultCallback = std::function; +using ReceivedAssetCallback = std::function; +using GetInfoCallback = std::function; +using UploadResultCallback = std::function; class AssetClient : public QObject, public Dependency { Q_OBJECT diff --git a/libraries/networking/src/AssetRequest.cpp b/libraries/networking/src/AssetRequest.cpp index ac9e1fba73..f9d5c70bf5 100644 --- a/libraries/networking/src/AssetRequest.cpp +++ b/libraries/networking/src/AssetRequest.cpp @@ -41,17 +41,28 @@ void AssetRequest::start() { _state = WAITING_FOR_INFO; auto assetClient = DependencyManager::get(); - assetClient->getAssetInfo(_hash, _extension, [this](AssetServerError serverError, AssetInfo info) { + assetClient->getAssetInfo(_hash, _extension, [this](bool responseReceived, AssetServerError serverError, AssetInfo info) { _info = info; - if (serverError != AssetServerError::NoError) { + if (!responseReceived) { + _error = NetworkError; + } else if (serverError != AssetServerError::NoError) { + switch(serverError) { + case AssetServerError::AssetNotFound: + _error = NotFound; + break; + default: + _error = UnknownError; + break; + } + } + + if (_error != NoError) { qCDebug(networking) << "Got error retrieving asset info for" << _hash; - - _state = FINISHED; + + _state = Finished; emit finished(this); - _error = (serverError == AssetServerError::AssetNotFound) ? NotFound : UnknownError; - return; } @@ -63,11 +74,25 @@ void AssetRequest::start() { int start = 0, end = _info.size; auto assetClient = DependencyManager::get(); - assetClient->getAsset(_hash, _extension, start, end, [this, start, end](AssetServerError serverError, + assetClient->getAsset(_hash, _extension, start, end, [this, start, end](bool responseReceived, AssetServerError serverError, const QByteArray& data) { Q_ASSERT(data.size() == (end - start)); - if (serverError == AssetServerError::NoError) { + if (!responseReceived) { + _error = NetworkError; + } else if (serverError != AssetServerError::NoError) { + switch (serverError) { + case AssetServerError::AssetNotFound: + _error = NotFound; + break; + case AssetServerError::InvalidByteRange: + _error = InvalidByteRange; + break; + default: + _error = UnknownError; + break; + } + } else { // we need to check the hash of the received data to make sure it matches what we expect if (hashData(data).toHex() == _hash) { @@ -79,28 +104,13 @@ void AssetRequest::start() { _error = HashVerificationFailed; } - } else { - switch (serverError) { - case AssetServerError::AssetNotFound: - _error = NotFound; - break; - case AssetServerError::InvalidByteRange: - _error = InvalidByteRange; - break; - case AssetServerError::NetworkError: - _error = Error::NetworkError; - break; - default: - _error = UnknownError; - break; - } } if (_error != NoError) { qCDebug(networking) << "Got error retrieving asset" << _hash << "- error code" << _error; } - _state = FINISHED; + _state = Finished; emit finished(this); }); }); diff --git a/libraries/networking/src/AssetUpload.cpp b/libraries/networking/src/AssetUpload.cpp index f51cb4a7b3..9c9d172959 100644 --- a/libraries/networking/src/AssetUpload.cpp +++ b/libraries/networking/src/AssetUpload.cpp @@ -43,20 +43,24 @@ void AssetUpload::start() { qDebug() << "Attempting to upload" << _filename << "to asset-server."; - assetClient->uploadAsset(data, _extension, [this](AssetServerError error, const QString& hash){ - switch (error) { - case AssetServerError::NoError: - _error = NoError; - break; - case AssetServerError::AssetTooLarge: - _error = TooLarge; - break; - case AssetServerError::PermissionDenied: - _error = PermissionDenied; - break; - default: - _error = FileOpenError; - break; + assetClient->uploadAsset(data, _extension, [this](bool responseReceived, AssetServerError error, const QString& hash){ + if (!responseReceived) { + _error = NetworkError; + } else { + switch (error) { + case AssetServerError::NoError: + _error = NoError; + break; + case AssetServerError::AssetTooLarge: + _error = TooLarge; + break; + case AssetServerError::PermissionDenied: + _error = PermissionDenied; + break; + default: + _error = FileOpenError; + break; + } } emit finished(this, hash); }); diff --git a/libraries/networking/src/AssetUtils.h b/libraries/networking/src/AssetUtils.h index c944657285..b18ff329fc 100644 --- a/libraries/networking/src/AssetUtils.h +++ b/libraries/networking/src/AssetUtils.h @@ -28,8 +28,7 @@ enum AssetServerError : uint8_t { AssetNotFound, InvalidByteRange, AssetTooLarge, - PermissionDenied, - NetworkError = 128 + PermissionDenied }; const QString ATP_SCHEME = "atp";