mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 09:48:44 +02:00
Generalize atp handling in network access managers
This commit is contained in:
parent
cb153f2a29
commit
51fb52977e
8 changed files with 55 additions and 84 deletions
|
@ -25,7 +25,7 @@
|
||||||
#include <NumericalConstants.h>
|
#include <NumericalConstants.h>
|
||||||
#include <Finally.h>
|
#include <Finally.h>
|
||||||
#include <PathUtils.h>
|
#include <PathUtils.h>
|
||||||
#include <QmlNetworkAccessManager.h>
|
#include <NetworkAccessManager.h>
|
||||||
|
|
||||||
#include "OffscreenGLCanvas.h"
|
#include "OffscreenGLCanvas.h"
|
||||||
#include "GLEscrow.h"
|
#include "GLEscrow.h"
|
||||||
|
@ -56,6 +56,22 @@ private:
|
||||||
friend class OffscreenQmlSurface;
|
friend class OffscreenQmlSurface;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class QmlNetworkAccessManager : public NetworkAccessManager {
|
||||||
|
public:
|
||||||
|
friend class QmlNetworkAccessManagerFactory;
|
||||||
|
protected:
|
||||||
|
QmlNetworkAccessManager(QObject* parent) : NetworkAccessManager(parent) { }
|
||||||
|
};
|
||||||
|
|
||||||
|
class QmlNetworkAccessManagerFactory : public QQmlNetworkAccessManagerFactory {
|
||||||
|
public:
|
||||||
|
QNetworkAccessManager* create(QObject* parent);
|
||||||
|
};
|
||||||
|
|
||||||
|
QNetworkAccessManager* QmlNetworkAccessManagerFactory::create(QObject* parent) {
|
||||||
|
return new QmlNetworkAccessManager(parent);
|
||||||
|
}
|
||||||
|
|
||||||
Q_DECLARE_LOGGING_CATEGORY(offscreenFocus)
|
Q_DECLARE_LOGGING_CATEGORY(offscreenFocus)
|
||||||
Q_LOGGING_CATEGORY(offscreenFocus, "hifi.offscreen.focus")
|
Q_LOGGING_CATEGORY(offscreenFocus, "hifi.offscreen.focus")
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// QmlAtpReply.cpp
|
// AtpReply.cpp
|
||||||
// libraries/networking/src
|
// libraries/networking/src
|
||||||
//
|
//
|
||||||
// Created by Zander Otavka on 8/4/16.
|
// Created by Zander Otavka on 8/4/16.
|
||||||
|
@ -10,30 +10,30 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "ResourceManager.h"
|
#include "ResourceManager.h"
|
||||||
#include "QmlAtpReply.h"
|
#include "AtpReply.h"
|
||||||
|
|
||||||
QmlAtpReply::QmlAtpReply(const QUrl& url, QObject* parent) :
|
AtpReply::AtpReply(const QUrl& url, QObject* parent) :
|
||||||
_resourceRequest(ResourceManager::createResourceRequest(parent, url)) {
|
_resourceRequest(ResourceManager::createResourceRequest(parent, url)) {
|
||||||
setOperation(QNetworkAccessManager::GetOperation);
|
setOperation(QNetworkAccessManager::GetOperation);
|
||||||
|
|
||||||
connect(_resourceRequest, &AssetResourceRequest::progress, this, &QmlAtpReply::downloadProgress);
|
connect(_resourceRequest, &AssetResourceRequest::progress, this, &AtpReply::downloadProgress);
|
||||||
connect(_resourceRequest, &AssetResourceRequest::finished, this, &QmlAtpReply::handleRequestFinish);
|
connect(_resourceRequest, &AssetResourceRequest::finished, this, &AtpReply::handleRequestFinish);
|
||||||
|
|
||||||
_resourceRequest->send();
|
_resourceRequest->send();
|
||||||
}
|
}
|
||||||
|
|
||||||
QmlAtpReply::~QmlAtpReply() {
|
AtpReply::~AtpReply() {
|
||||||
if (_resourceRequest) {
|
if (_resourceRequest) {
|
||||||
_resourceRequest->deleteLater();
|
_resourceRequest->deleteLater();
|
||||||
_resourceRequest = nullptr;
|
_resourceRequest = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 QmlAtpReply::bytesAvailable() const {
|
qint64 AtpReply::bytesAvailable() const {
|
||||||
return _content.size() - _readOffset + QIODevice::bytesAvailable();
|
return _content.size() - _readOffset + QIODevice::bytesAvailable();
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 QmlAtpReply::readData(char* data, qint64 maxSize) {
|
qint64 AtpReply::readData(char* data, qint64 maxSize) {
|
||||||
if (_readOffset < _content.size()) {
|
if (_readOffset < _content.size()) {
|
||||||
qint64 readSize = qMin(maxSize, _content.size() - _readOffset);
|
qint64 readSize = qMin(maxSize, _content.size() - _readOffset);
|
||||||
memcpy(data, _content.constData() + _readOffset, readSize);
|
memcpy(data, _content.constData() + _readOffset, readSize);
|
||||||
|
@ -44,7 +44,7 @@ qint64 QmlAtpReply::readData(char* data, qint64 maxSize) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmlAtpReply::handleRequestFinish() {
|
void AtpReply::handleRequestFinish() {
|
||||||
Q_ASSERT(_resourceRequest->getState() == ResourceRequest::State::Finished);
|
Q_ASSERT(_resourceRequest->getState() == ResourceRequest::State::Finished);
|
||||||
|
|
||||||
switch (_resourceRequest->getResult()) {
|
switch (_resourceRequest->getResult()) {
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// QmlAtpReply.h
|
// AtpReply.h
|
||||||
// libraries/networking/src
|
// libraries/networking/src
|
||||||
//
|
//
|
||||||
// Created by Zander Otavka on 8/4/16.
|
// Created by Zander Otavka on 8/4/16.
|
||||||
|
@ -9,19 +9,19 @@
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef hifi_QmlAtpReply_h
|
#ifndef hifi_AtpReply_h
|
||||||
#define hifi_QmlAtpReply_h
|
#define hifi_AtpReply_h
|
||||||
|
|
||||||
#include <QtNetwork/QNetworkReply>
|
#include <QtNetwork/QNetworkReply>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
|
|
||||||
#include "AssetResourceRequest.h"
|
#include "AssetResourceRequest.h"
|
||||||
|
|
||||||
class QmlAtpReply : public QNetworkReply {
|
class AtpReply : public QNetworkReply {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
QmlAtpReply(const QUrl& url, QObject* parent = Q_NULLPTR);
|
AtpReply(const QUrl& url, QObject* parent = Q_NULLPTR);
|
||||||
~QmlAtpReply();
|
~AtpReply();
|
||||||
qint64 bytesAvailable() const override;
|
qint64 bytesAvailable() const override;
|
||||||
void abort() override { }
|
void abort() override { }
|
||||||
bool isSequential() const override { return true; }
|
bool isSequential() const override { return true; }
|
||||||
|
@ -37,4 +37,4 @@ private:
|
||||||
qint64 _readOffset { 0 };
|
qint64 _readOffset { 0 };
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_QmlAtpReply_h
|
#endif // hifi_AtpReply_h
|
|
@ -1,6 +1,6 @@
|
||||||
//
|
//
|
||||||
// NetworkAccessManager.cpp
|
// NetworkAccessManager.cpp
|
||||||
//
|
// libraries/networking/src
|
||||||
//
|
//
|
||||||
// Created by Clement on 7/1/14.
|
// Created by Clement on 7/1/14.
|
||||||
// Copyright 2014 High Fidelity, Inc.
|
// Copyright 2014 High Fidelity, Inc.
|
||||||
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
#include <QThreadStorage>
|
#include <QThreadStorage>
|
||||||
|
|
||||||
|
#include "AtpReply.h"
|
||||||
#include "NetworkAccessManager.h"
|
#include "NetworkAccessManager.h"
|
||||||
|
|
||||||
QThreadStorage<QNetworkAccessManager*> networkAccessManagers;
|
QThreadStorage<QNetworkAccessManager*> networkAccessManagers;
|
||||||
|
@ -23,3 +24,13 @@ QNetworkAccessManager& NetworkAccessManager::getInstance() {
|
||||||
|
|
||||||
return *networkAccessManagers.localData();
|
return *networkAccessManagers.localData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QNetworkReply* NetworkAccessManager::createRequest(Operation operation, const QNetworkRequest& request, QIODevice* device) {
|
||||||
|
if (request.url().scheme() == "atp" && operation == GetOperation) {
|
||||||
|
return new AtpReply(request.url());
|
||||||
|
//auto url = request.url().toString();
|
||||||
|
//return QNetworkAccessManager::createRequest(operation, request, device);
|
||||||
|
} else {
|
||||||
|
return QNetworkAccessManager::createRequest(operation, request, device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
//
|
//
|
||||||
// NetworkAccessManager.h
|
// NetworkAccessManager.h
|
||||||
//
|
// libraries/networking/src
|
||||||
//
|
//
|
||||||
// Created by Clement on 7/1/14.
|
// Created by Clement on 7/1/14.
|
||||||
// Copyright 2014 High Fidelity, Inc.
|
// Copyright 2014 High Fidelity, Inc.
|
||||||
|
@ -13,12 +13,17 @@
|
||||||
#define hifi_NetworkAccessManager_h
|
#define hifi_NetworkAccessManager_h
|
||||||
|
|
||||||
#include <QtNetwork/QNetworkAccessManager>
|
#include <QtNetwork/QNetworkAccessManager>
|
||||||
|
#include <QtNetwork/QNetworkRequest>
|
||||||
|
#include <QtQml/QQmlNetworkAccessManagerFactory>
|
||||||
|
|
||||||
/// Wrapper around QNetworkAccessManager to restrict at one instance by thread
|
/// Wrapper around QNetworkAccessManager to restrict at one instance by thread
|
||||||
class NetworkAccessManager : public QObject {
|
class NetworkAccessManager : public QNetworkAccessManager {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
static QNetworkAccessManager& getInstance();
|
static QNetworkAccessManager& getInstance();
|
||||||
|
protected:
|
||||||
|
NetworkAccessManager(QObject* parent = Q_NULLPTR) : QNetworkAccessManager(parent) {}
|
||||||
|
virtual QNetworkReply* createRequest(Operation op, const QNetworkRequest& request, QIODevice* device = Q_NULLPTR) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_NetworkAccessManager_h
|
#endif // hifi_NetworkAccessManager_h
|
|
@ -12,12 +12,13 @@
|
||||||
#ifndef hifi_OAuthNetworkAccessManager_h
|
#ifndef hifi_OAuthNetworkAccessManager_h
|
||||||
#define hifi_OAuthNetworkAccessManager_h
|
#define hifi_OAuthNetworkAccessManager_h
|
||||||
|
|
||||||
#include <QNetworkAccessManager>
|
#include "NetworkAccessManager.h"
|
||||||
|
|
||||||
class OAuthNetworkAccessManager : public QNetworkAccessManager {
|
class OAuthNetworkAccessManager : public NetworkAccessManager {
|
||||||
public:
|
public:
|
||||||
static OAuthNetworkAccessManager* getInstance();
|
static OAuthNetworkAccessManager* getInstance();
|
||||||
protected:
|
protected:
|
||||||
|
OAuthNetworkAccessManager(QObject* parent = Q_NULLPTR) : NetworkAccessManager(parent) { }
|
||||||
virtual QNetworkReply* createRequest(Operation op, const QNetworkRequest& req, QIODevice* outgoingData = 0);
|
virtual QNetworkReply* createRequest(Operation op, const QNetworkRequest& req, QIODevice* outgoingData = 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
//
|
|
||||||
// QmlNetworkAccessManager.cpp
|
|
||||||
// libraries/networking/src
|
|
||||||
//
|
|
||||||
// Created by Zander Otavka on 8/4/16.
|
|
||||||
// Copyright 2014 High Fidelity, Inc.
|
|
||||||
//
|
|
||||||
// Distributed under the Apache License, Version 2.0.
|
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <QThreadStorage>
|
|
||||||
|
|
||||||
#include "QmlAtpReply.h"
|
|
||||||
#include "QmlNetworkAccessManager.h"
|
|
||||||
|
|
||||||
QNetworkAccessManager* QmlNetworkAccessManagerFactory::create(QObject* parent) {
|
|
||||||
return new QmlNetworkAccessManager(parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
QNetworkReply* QmlNetworkAccessManager::createRequest(Operation operation, const QNetworkRequest& request, QIODevice* device) {
|
|
||||||
if (request.url().scheme() == "atp" && operation == GetOperation) {
|
|
||||||
return new QmlAtpReply(request.url());
|
|
||||||
//auto url = request.url().toString();
|
|
||||||
//return QNetworkAccessManager::createRequest(operation, request, device);
|
|
||||||
} else {
|
|
||||||
return QNetworkAccessManager::createRequest(operation, request, device);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,33 +0,0 @@
|
||||||
//
|
|
||||||
// QmlNetworkAccessManager.h
|
|
||||||
// libraries/networking/src
|
|
||||||
//
|
|
||||||
// Created by Zander Otavka on 8/4/16.
|
|
||||||
// Copyright 2014 High Fidelity, Inc.
|
|
||||||
//
|
|
||||||
// Distributed under the Apache License, Version 2.0.
|
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef hifi_QmlNetworkAccessManager_h
|
|
||||||
#define hifi_QmlNetworkAccessManager_h
|
|
||||||
|
|
||||||
#include <QtNetwork/QNetworkAccessManager>
|
|
||||||
#include <QtNetwork/QNetworkRequest>
|
|
||||||
#include <QtQml/QQmlNetworkAccessManagerFactory>
|
|
||||||
|
|
||||||
class QmlNetworkAccessManagerFactory : public QQmlNetworkAccessManagerFactory {
|
|
||||||
public:
|
|
||||||
QNetworkAccessManager* create(QObject* parent);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class QmlNetworkAccessManager : public QNetworkAccessManager {
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
QmlNetworkAccessManager(QObject* parent = Q_NULLPTR) : QNetworkAccessManager(parent) { }
|
|
||||||
protected:
|
|
||||||
QNetworkReply* createRequest(Operation op, const QNetworkRequest& request, QIODevice* device = Q_NULLPTR);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // hifi_QmlNetworkAccessManager_h
|
|
Loading…
Reference in a new issue