mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 04:12:46 +02:00
Update AssetClient callbacks to return whether a response was received
This commit is contained in:
parent
71456eee5e
commit
6468046c68
5 changed files with 62 additions and 49 deletions
|
@ -169,7 +169,7 @@ void AssetClient::handleAssetGetInfoReply(QSharedPointer<NLPacket> packet, Share
|
||||||
auto requestIt = messageCallbackMap.find(messageID);
|
auto requestIt = messageCallbackMap.find(messageID);
|
||||||
if (requestIt != messageCallbackMap.end()) {
|
if (requestIt != messageCallbackMap.end()) {
|
||||||
auto callback = requestIt->second;
|
auto callback = requestIt->second;
|
||||||
callback(error, info);
|
callback(true, error, info);
|
||||||
messageCallbackMap.erase(requestIt);
|
messageCallbackMap.erase(requestIt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ void AssetClient::handleAssetGetReply(QSharedPointer<NLPacketList> packetList, S
|
||||||
auto requestIt = messageCallbackMap.find(messageID);
|
auto requestIt = messageCallbackMap.find(messageID);
|
||||||
if (requestIt != messageCallbackMap.end()) {
|
if (requestIt != messageCallbackMap.end()) {
|
||||||
auto callback = requestIt->second;
|
auto callback = requestIt->second;
|
||||||
callback(error, data);
|
callback(true, error, data);
|
||||||
messageCallbackMap.erase(requestIt);
|
messageCallbackMap.erase(requestIt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -276,7 +276,7 @@ void AssetClient::handleAssetUploadReply(QSharedPointer<NLPacket> packet, Shared
|
||||||
auto requestIt = messageCallbackMap.find(messageID);
|
auto requestIt = messageCallbackMap.find(messageID);
|
||||||
if (requestIt != messageCallbackMap.end()) {
|
if (requestIt != messageCallbackMap.end()) {
|
||||||
auto callback = requestIt->second;
|
auto callback = requestIt->second;
|
||||||
callback(error, hashString);
|
callback(true, error, hashString);
|
||||||
messageCallbackMap.erase(requestIt);
|
messageCallbackMap.erase(requestIt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -290,7 +290,7 @@ void AssetClient::handleNodeKilled(SharedNodePointer node) {
|
||||||
auto messageMapIt = _pendingRequests.find(node);
|
auto messageMapIt = _pendingRequests.find(node);
|
||||||
if (messageMapIt != _pendingRequests.end()) {
|
if (messageMapIt != _pendingRequests.end()) {
|
||||||
for (const auto& value : messageMapIt->second) {
|
for (const auto& value : messageMapIt->second) {
|
||||||
value.second(AssetServerError::NetworkError, QByteArray());
|
value.second(false, AssetServerError::NoError, QByteArray());
|
||||||
}
|
}
|
||||||
messageMapIt->second.clear();
|
messageMapIt->second.clear();
|
||||||
}
|
}
|
||||||
|
@ -301,7 +301,7 @@ void AssetClient::handleNodeKilled(SharedNodePointer node) {
|
||||||
if (messageMapIt != _pendingInfoRequests.end()) {
|
if (messageMapIt != _pendingInfoRequests.end()) {
|
||||||
AssetInfo info { "", 0 };
|
AssetInfo info { "", 0 };
|
||||||
for (const auto& value : messageMapIt->second) {
|
for (const auto& value : messageMapIt->second) {
|
||||||
value.second(AssetServerError::NetworkError, info);
|
value.second(false, AssetServerError::NoError, info);
|
||||||
}
|
}
|
||||||
messageMapIt->second.clear();
|
messageMapIt->second.clear();
|
||||||
}
|
}
|
||||||
|
@ -311,7 +311,7 @@ void AssetClient::handleNodeKilled(SharedNodePointer node) {
|
||||||
auto messageMapIt = _pendingUploads.find(node);
|
auto messageMapIt = _pendingUploads.find(node);
|
||||||
if (messageMapIt != _pendingUploads.end()) {
|
if (messageMapIt != _pendingUploads.end()) {
|
||||||
for (const auto& value : messageMapIt->second) {
|
for (const auto& value : messageMapIt->second) {
|
||||||
value.second(AssetServerError::NetworkError, "");
|
value.second(false, AssetServerError::NoError, "");
|
||||||
}
|
}
|
||||||
messageMapIt->second.clear();
|
messageMapIt->second.clear();
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,9 +30,9 @@ struct AssetInfo {
|
||||||
int64_t size;
|
int64_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
using ReceivedAssetCallback = std::function<void(AssetServerError serverError, const QByteArray& data)>;
|
using ReceivedAssetCallback = std::function<void(bool responseReceived, AssetServerError serverError, const QByteArray& data)>;
|
||||||
using GetInfoCallback = std::function<void(AssetServerError serverError, AssetInfo info)>;
|
using GetInfoCallback = std::function<void(bool responseReceived, AssetServerError serverError, AssetInfo info)>;
|
||||||
using UploadResultCallback = std::function<void(AssetServerError serverError, const QString& hash)>;
|
using UploadResultCallback = std::function<void(bool responseReceived, AssetServerError serverError, const QString& hash)>;
|
||||||
|
|
||||||
class AssetClient : public QObject, public Dependency {
|
class AssetClient : public QObject, public Dependency {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
|
@ -41,17 +41,28 @@ void AssetRequest::start() {
|
||||||
_state = WAITING_FOR_INFO;
|
_state = WAITING_FOR_INFO;
|
||||||
|
|
||||||
auto assetClient = DependencyManager::get<AssetClient>();
|
auto assetClient = DependencyManager::get<AssetClient>();
|
||||||
assetClient->getAssetInfo(_hash, _extension, [this](AssetServerError serverError, AssetInfo info) {
|
assetClient->getAssetInfo(_hash, _extension, [this](bool responseReceived, AssetServerError serverError, AssetInfo info) {
|
||||||
_info = 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;
|
qCDebug(networking) << "Got error retrieving asset info for" << _hash;
|
||||||
|
|
||||||
_state = FINISHED;
|
_state = Finished;
|
||||||
emit finished(this);
|
emit finished(this);
|
||||||
|
|
||||||
_error = (serverError == AssetServerError::AssetNotFound) ? NotFound : UnknownError;
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,11 +74,25 @@ void AssetRequest::start() {
|
||||||
int start = 0, end = _info.size;
|
int start = 0, end = _info.size;
|
||||||
|
|
||||||
auto assetClient = DependencyManager::get<AssetClient>();
|
auto assetClient = DependencyManager::get<AssetClient>();
|
||||||
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) {
|
const QByteArray& data) {
|
||||||
Q_ASSERT(data.size() == (end - start));
|
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
|
// we need to check the hash of the received data to make sure it matches what we expect
|
||||||
if (hashData(data).toHex() == _hash) {
|
if (hashData(data).toHex() == _hash) {
|
||||||
|
@ -79,28 +104,13 @@ void AssetRequest::start() {
|
||||||
_error = HashVerificationFailed;
|
_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) {
|
if (_error != NoError) {
|
||||||
qCDebug(networking) << "Got error retrieving asset" << _hash << "- error code" << _error;
|
qCDebug(networking) << "Got error retrieving asset" << _hash << "- error code" << _error;
|
||||||
}
|
}
|
||||||
|
|
||||||
_state = FINISHED;
|
_state = Finished;
|
||||||
emit finished(this);
|
emit finished(this);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -43,20 +43,24 @@ void AssetUpload::start() {
|
||||||
|
|
||||||
qDebug() << "Attempting to upload" << _filename << "to asset-server.";
|
qDebug() << "Attempting to upload" << _filename << "to asset-server.";
|
||||||
|
|
||||||
assetClient->uploadAsset(data, _extension, [this](AssetServerError error, const QString& hash){
|
assetClient->uploadAsset(data, _extension, [this](bool responseReceived, AssetServerError error, const QString& hash){
|
||||||
switch (error) {
|
if (!responseReceived) {
|
||||||
case AssetServerError::NoError:
|
_error = NetworkError;
|
||||||
_error = NoError;
|
} else {
|
||||||
break;
|
switch (error) {
|
||||||
case AssetServerError::AssetTooLarge:
|
case AssetServerError::NoError:
|
||||||
_error = TooLarge;
|
_error = NoError;
|
||||||
break;
|
break;
|
||||||
case AssetServerError::PermissionDenied:
|
case AssetServerError::AssetTooLarge:
|
||||||
_error = PermissionDenied;
|
_error = TooLarge;
|
||||||
break;
|
break;
|
||||||
default:
|
case AssetServerError::PermissionDenied:
|
||||||
_error = FileOpenError;
|
_error = PermissionDenied;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
_error = FileOpenError;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
emit finished(this, hash);
|
emit finished(this, hash);
|
||||||
});
|
});
|
||||||
|
|
|
@ -28,8 +28,7 @@ enum AssetServerError : uint8_t {
|
||||||
AssetNotFound,
|
AssetNotFound,
|
||||||
InvalidByteRange,
|
InvalidByteRange,
|
||||||
AssetTooLarge,
|
AssetTooLarge,
|
||||||
PermissionDenied,
|
PermissionDenied
|
||||||
NetworkError = 128
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const QString ATP_SCHEME = "atp";
|
const QString ATP_SCHEME = "atp";
|
||||||
|
|
Loading…
Reference in a new issue