Update ResourceManager

This commit is contained in:
Ryan Huffman 2015-08-19 12:16:34 -07:00
parent 4827d326f4
commit 7305135125
2 changed files with 39 additions and 13 deletions

View file

@ -12,7 +12,6 @@
#include <QFile>
#include <QNetworkRequest>
#include <QNetworkReply>
#include "AssetClient.h"
#include "AssetRequest.h"
@ -31,24 +30,38 @@ ResourceRequest::ResourceRequest(QObject* parent, const QUrl& url) :
_url(url) {
}
HTTPResourceRequest::~HTTPResourceRequest() {
if (_reply) {
_reply->disconnect(this);
_reply->deleteLater();
_reply = nullptr;
}
}
void HTTPResourceRequest::doSend() {
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
QNetworkRequest networkRequest = QNetworkRequest(_url);
networkRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT);
if (!_cacheEnabled) {
if (_cacheEnabled) {
networkRequest.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
} else {
networkRequest.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork);
}
}
QNetworkReply* reply = networkAccessManager.get(networkRequest);
QObject::connect(reply, &QNetworkReply::finished, [=]() {
if (_state != IN_PROGRESS) return;
_reply = networkAccessManager.get(networkRequest);
QObject::connect(_reply, &QNetworkReply::finished, [=]() {
Q_ASSERT(_state == IN_PROGRESS);
Q_ASSERT(_reply);
_state = FINISHED;
auto error = reply->error();
auto error = _reply->error();
qDebug() << "Loaded " << _url;
QString u = _url.path();
if (error == QNetworkReply::NoError) {
_data = reply->readAll();
_data = _reply->readAll();
qDebug() << "!!!! " << _data.size() << " " << _url.path();
_loadedFromCache = _reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool();
_result = ResourceRequest::SUCCESS;
emit finished();
} else if (error == QNetworkReply::TimeoutError) {
@ -58,7 +71,8 @@ void HTTPResourceRequest::doSend() {
_result = ResourceRequest::ERROR;
emit finished();
}
reply->deleteLater();
_reply->deleteLater();
_reply = nullptr;
});
}
@ -105,16 +119,20 @@ void ATPResourceRequest::doSend() {
const int TIMEOUT_MS = 2000;
void ResourceRequest::send() {
Q_ASSERT(_state == UNSENT);
_state = IN_PROGRESS;
doSend();
connect(&_sendTimer, &QTimer::timeout, this, &ResourceRequest::timeout);
_sendTimer.setSingleShot(true);
_sendTimer.start(TIMEOUT_MS);
_state = IN_PROGRESS;
doSend();
}
void ResourceRequest::timeout() {
Q_ASSERT(_state != UNSENT);
// TIMEOUT!!
if (_state == UNSENT) {
if (_state == IN_PROGRESS) {
qDebug() << "TImed out loading " << _url;
_state = FINISHED;
_result = TIMEOUT;

View file

@ -15,6 +15,7 @@
#include <functional>
#include <QObject>
#include <QNetworkReply>
#include <QTimer>
#include <QUrl>
@ -41,6 +42,7 @@ public:
State getState() const { return _state; }
Result getResult() const { return _result; }
QUrl getUrl() const { return _url; }
bool loadedFromCache() const { return _loadedFromCache; }
void setCacheEnabled(bool value) { _cacheEnabled = value; }
@ -52,11 +54,12 @@ protected:
virtual void doSend() = 0;
QUrl _url;
State _state = UNSENT;
State _state { UNSENT };
Result _result;
QTimer _sendTimer;
QByteArray _data;
bool _cacheEnabled { true };
bool _loadedFromCache { false };
private slots:
void timeout();
@ -65,10 +68,15 @@ private slots:
class HTTPResourceRequest : public ResourceRequest {
Q_OBJECT
public:
~HTTPResourceRequest();
HTTPResourceRequest(QObject* parent, const QUrl& url) : ResourceRequest(parent, url) { }
protected:
virtual void doSend() override;
private:
QNetworkReply* _reply { nullptr };
};
class FileResourceRequest : public ResourceRequest {