Add MappingRequest superclass and mapping specific errors

This commit is contained in:
Ryan Huffman 2016-03-08 11:18:10 -08:00
parent e06c1591fb
commit c9bd67bc3e
2 changed files with 110 additions and 36 deletions

View file

@ -30,14 +30,18 @@
MessageID AssetClient::_currentID = 0;
GetMappingRequest::GetMappingRequest(AssetPath path) : _path(path) {
};
void GetMappingRequest::start() {
void MappingRequest::start() {
if (QThread::currentThread() != thread()) {
QMetaObject::invokeMethod(this, "start", Qt::AutoConnection);
return;
}
doStart();
};
GetMappingRequest::GetMappingRequest(AssetPath path) : _path(path) {
};
void GetMappingRequest::doStart() {
auto assetClient = DependencyManager::get<AssetClient>();
@ -50,9 +54,23 @@ void GetMappingRequest::start() {
}
assetClient->getAssetMapping(_path, [this, assetClient](bool responseReceived, AssetServerError error, QSharedPointer<ReceivedMessage> message) {
// read message
_error = error;
if (!error) {
if (!responseReceived) {
_error = NetworkError;
} else {
switch (error) {
case AssetServerError::NoError:
_error = NoError;
break;
case AssetServerError::AssetNotFound:
_error = NotFound;
break;
default:
_error = UnknownError;
break;
}
}
if (!_error) {
//_hash = message->read(SHA256_HASH_HEX_LENGTH);
_hash = message->readString();
assetClient->_mappingCache[_path] = _hash;
@ -64,7 +82,7 @@ void GetMappingRequest::start() {
GetAllMappingsRequest::GetAllMappingsRequest() {
};
void GetAllMappingsRequest::start() {
void GetAllMappingsRequest::doStart() {
if (QThread::currentThread() != thread()) {
QMetaObject::invokeMethod(this, "start", Qt::AutoConnection);
return;
@ -72,8 +90,20 @@ void GetAllMappingsRequest::start() {
auto assetClient = DependencyManager::get<AssetClient>();
assetClient->getAllAssetMappings([this, assetClient](bool responseReceived, AssetServerError error, QSharedPointer<ReceivedMessage> message) {
// read message
_error = error;
if (!responseReceived) {
_error = NetworkError;
} else {
switch (error) {
case AssetServerError::NoError:
_error = NoError;
break;
default:
_error = UnknownError;
break;
}
}
if (!error) {
size_t numberOfMappings;
message->readPrimitive(&numberOfMappings);
@ -92,7 +122,7 @@ void GetAllMappingsRequest::start() {
SetMappingRequest::SetMappingRequest(AssetPath path, AssetHash hash) : _path(path), _hash(hash) {
};
void SetMappingRequest::start() {
void SetMappingRequest::doStart() {
if (QThread::currentThread() != thread()) {
QMetaObject::invokeMethod(this, "start", Qt::AutoConnection);
return;
@ -100,8 +130,22 @@ void SetMappingRequest::start() {
auto assetClient = DependencyManager::get<AssetClient>();
assetClient->setAssetMapping(_path, _hash, [this, assetClient](bool responseReceived, AssetServerError error, QSharedPointer<ReceivedMessage> message) {
// read message
_error = error;
if (!responseReceived) {
_error = NetworkError;
} else {
switch (error) {
case AssetServerError::NoError:
_error = NoError;
break;
case AssetServerError::PermissionDenied:
_error = PermissionDenied;
break;
default:
_error = UnknownError;
break;
}
}
if (!error) {
assetClient->_mappingCache[_path] = _hash;
}
@ -112,7 +156,7 @@ void SetMappingRequest::start() {
DeleteMappingRequest::DeleteMappingRequest(AssetPath path) : _path(path) {
};
void DeleteMappingRequest::start() {
void DeleteMappingRequest::doStart() {
if (QThread::currentThread() != thread()) {
QMetaObject::invokeMethod(this, "start", Qt::AutoConnection);
return;
@ -120,8 +164,22 @@ void DeleteMappingRequest::start() {
auto assetClient = DependencyManager::get<AssetClient>();
assetClient->deleteAssetMapping(_path, [this, assetClient](bool responseReceived, AssetServerError error, QSharedPointer<ReceivedMessage> message) {
// read message
_error = error;
if (!responseReceived) {
_error = NetworkError;
} else {
switch (error) {
case AssetServerError::NoError:
_error = NoError;
break;
case AssetServerError::PermissionDenied:
_error = PermissionDenied;
break;
default:
_error = UnknownError;
break;
}
}
if (!error) {
assetClient->_mappingCache.remove(_path);
}

View file

@ -43,78 +43,94 @@ using GetInfoCallback = std::function<void(bool responseReceived, AssetServerErr
using UploadResultCallback = std::function<void(bool responseReceived, AssetServerError serverError, const QString& hash)>;
using ProgressCallback = std::function<void(qint64 totalReceived, qint64 total)>;
class MappingRequest : public QObject {
Q_OBJECT
public:
enum Error {
NoError,
NotFound,
NetworkError,
PermissionDenied,
UnknownError
};
class GetMappingRequest : public QObject {
Q_INVOKABLE void start();
Error getError() const { return _error; }
protected:
Error _error { NoError };
private:
virtual void doStart() = 0;
};
class GetMappingRequest : public MappingRequest {
Q_OBJECT
public:
GetMappingRequest(AssetPath path);
Q_INVOKABLE void start();
AssetHash getHash() { return _hash; }
AssetServerError getError() { return _error; }
AssetHash getHash() const { return _hash; }
signals:
void finished(GetMappingRequest* thisRequest);
private:
virtual void doStart() override;
AssetPath _path;
AssetHash _hash;
AssetServerError _error { AssetServerError::NoError };
};
class SetMappingRequest : public QObject {
class SetMappingRequest : public MappingRequest {
Q_OBJECT
public:
SetMappingRequest(AssetPath path, AssetHash hash);
Q_INVOKABLE void start();
AssetHash getHash() { return _hash; }
AssetServerError getError() { return _error; }
AssetHash getHash() const { return _hash; }
signals:
void finished(SetMappingRequest* thisRequest);
private:
virtual void doStart() override;
AssetPath _path;
AssetHash _hash;
AssetServerError _error { AssetServerError::NoError };
};
class DeleteMappingRequest : public QObject {
class DeleteMappingRequest : public MappingRequest {
Q_OBJECT
public:
DeleteMappingRequest(AssetPath path);
Q_INVOKABLE void start();
AssetServerError getError() { return _error; }
signals:
void finished(DeleteMappingRequest* thisRequest);
private:
virtual void doStart() override;
AssetPath _path;
AssetServerError _error { AssetServerError::NoError };
};
class GetAllMappingsRequest : public QObject {
class GetAllMappingsRequest : public MappingRequest {
Q_OBJECT
public:
GetAllMappingsRequest();
Q_INVOKABLE void start();
AssetServerError getError() { return _error; }
AssetMapping getMappings() { return _mappings; }
AssetMapping getMappings() const { return _mappings; }
signals:
void finished(GetAllMappingsRequest* thisRequest);
private:
virtual void doStart() override;
std::map<AssetPath, AssetHash> _mappings;
AssetServerError _error { AssetServerError::NoError };
};