mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 14:18:24 +02:00
Remove multithread access from NetworkAccessManager for the time being
This commit is contained in:
parent
b7b46b0a3b
commit
982a50dbcf
2 changed files with 10 additions and 160 deletions
|
@ -9,153 +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
|
||||||
//
|
//
|
||||||
|
|
||||||
#include <QMetaObject>
|
#include <QThreadStorage>
|
||||||
#include <QAbstractNetworkCache>
|
|
||||||
#include <QThread>
|
|
||||||
|
|
||||||
#include "NetworkAccessManager.h"
|
#include "NetworkAccessManager.h"
|
||||||
|
|
||||||
|
QThreadStorage<NetworkAccessManager*> networkAccessManagers;
|
||||||
|
|
||||||
NetworkAccessManager& NetworkAccessManager::getInstance() {
|
NetworkAccessManager& NetworkAccessManager::getInstance() {
|
||||||
static NetworkAccessManager sharedInstance;
|
if (!networkAccessManagers.hasLocalData()) {
|
||||||
return sharedInstance;
|
networkAccessManagers.setLocalData(new NetworkAccessManager());
|
||||||
|
}
|
||||||
|
|
||||||
|
return *networkAccessManagers.localData();
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkAccessManager::NetworkAccessManager() {
|
NetworkAccessManager::NetworkAccessManager() {
|
||||||
qRegisterMetaType<QAbstractNetworkCache*>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QNetworkReply* NetworkAccessManager::get(const QNetworkRequest& request) {
|
|
||||||
if (QThread::currentThread() != thread()) {
|
|
||||||
QNetworkReply* result;
|
|
||||||
QMetaObject::invokeMethod(this,
|
|
||||||
"get",
|
|
||||||
Qt::BlockingQueuedConnection,
|
|
||||||
Q_RETURN_ARG(QNetworkReply*, result),
|
|
||||||
Q_ARG(const QNetworkRequest, request));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return QNetworkAccessManager::get(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
QNetworkReply* NetworkAccessManager::head(const QNetworkRequest& request) {
|
|
||||||
if (QThread::currentThread() != thread()) {
|
|
||||||
QNetworkReply* result;
|
|
||||||
QMetaObject::invokeMethod(this,
|
|
||||||
"head",
|
|
||||||
Qt::BlockingQueuedConnection,
|
|
||||||
Q_RETURN_ARG(QNetworkReply*, result),
|
|
||||||
Q_ARG(const QNetworkRequest, request));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return QNetworkAccessManager::head(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
QNetworkReply* NetworkAccessManager::post(const QNetworkRequest& request, QIODevice* data) {
|
|
||||||
if (QThread::currentThread() != thread()) {
|
|
||||||
QNetworkReply* result;
|
|
||||||
QMetaObject::invokeMethod(this,
|
|
||||||
"post",
|
|
||||||
Qt::BlockingQueuedConnection,
|
|
||||||
Q_RETURN_ARG(QNetworkReply*, result),
|
|
||||||
Q_ARG(const QNetworkRequest, request),
|
|
||||||
Q_ARG(QIODevice*, data));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return QNetworkAccessManager::post(request, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
QNetworkReply* NetworkAccessManager::post(const QNetworkRequest& request, const QByteArray& data) {
|
|
||||||
if (QThread::currentThread() != thread()) {
|
|
||||||
QNetworkReply* result;
|
|
||||||
QMetaObject::invokeMethod(this,
|
|
||||||
"post",
|
|
||||||
Qt::BlockingQueuedConnection,
|
|
||||||
Q_RETURN_ARG(QNetworkReply*, result),
|
|
||||||
Q_ARG(const QNetworkRequest, request),
|
|
||||||
Q_ARG(const QByteArray, data));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return QNetworkAccessManager::post(request, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
QNetworkReply* NetworkAccessManager::post(const QNetworkRequest& request, QHttpMultiPart* multiPart) {
|
|
||||||
if (QThread::currentThread() != thread()) {
|
|
||||||
QNetworkReply* result;
|
|
||||||
QMetaObject::invokeMethod(this,
|
|
||||||
"post",
|
|
||||||
Qt::BlockingQueuedConnection,
|
|
||||||
Q_RETURN_ARG(QNetworkReply*, result),
|
|
||||||
Q_ARG(const QNetworkRequest, request),
|
|
||||||
Q_ARG(QHttpMultiPart*, multiPart));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return QNetworkAccessManager::post(request, multiPart);
|
|
||||||
}
|
|
||||||
|
|
||||||
QNetworkReply* NetworkAccessManager::put(const QNetworkRequest& request, QIODevice* data) {
|
|
||||||
if (QThread::currentThread() != thread()) {
|
|
||||||
QNetworkReply* result;
|
|
||||||
QMetaObject::invokeMethod(this,
|
|
||||||
"put",
|
|
||||||
Qt::BlockingQueuedConnection,
|
|
||||||
Q_RETURN_ARG(QNetworkReply*, result),
|
|
||||||
Q_ARG(const QNetworkRequest, request),
|
|
||||||
Q_ARG(QIODevice*, data));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return QNetworkAccessManager::put(request, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
QNetworkReply* NetworkAccessManager::put(const QNetworkRequest& request, QHttpMultiPart* multiPart) {
|
|
||||||
if (QThread::currentThread() != thread()) {
|
|
||||||
QNetworkReply* result;
|
|
||||||
QMetaObject::invokeMethod(this,
|
|
||||||
"put",
|
|
||||||
Qt::BlockingQueuedConnection,
|
|
||||||
Q_RETURN_ARG(QNetworkReply*, result),
|
|
||||||
Q_ARG(const QNetworkRequest, request),
|
|
||||||
Q_ARG(QHttpMultiPart*, multiPart));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return QNetworkAccessManager::put(request, multiPart);
|
|
||||||
}
|
|
||||||
|
|
||||||
QNetworkReply* NetworkAccessManager::put(const QNetworkRequest & request, const QByteArray & data) {
|
|
||||||
if (QThread::currentThread() != thread()) {
|
|
||||||
QNetworkReply* result;
|
|
||||||
QMetaObject::invokeMethod(this,
|
|
||||||
"put",
|
|
||||||
Qt::BlockingQueuedConnection,
|
|
||||||
Q_RETURN_ARG(QNetworkReply*, result),
|
|
||||||
Q_ARG(const QNetworkRequest, request),
|
|
||||||
Q_ARG(const QByteArray, data));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return QNetworkAccessManager::put(request, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QNetworkReply* NetworkAccessManager::sendCustomRequest(const QNetworkRequest& request, const QByteArray& verb, QIODevice* data) {
|
|
||||||
if (QThread::currentThread() != thread()) {
|
|
||||||
QNetworkReply* result;
|
|
||||||
QMetaObject::invokeMethod(this,
|
|
||||||
"sendCustomRequest",
|
|
||||||
Qt::BlockingQueuedConnection,
|
|
||||||
Q_RETURN_ARG(QNetworkReply*, result),
|
|
||||||
Q_ARG(const QNetworkRequest, request),
|
|
||||||
Q_ARG(const QByteArray, verb),
|
|
||||||
Q_ARG(QIODevice*, data));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return QNetworkAccessManager::sendCustomRequest(request, verb, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NetworkAccessManager::setCache(QAbstractNetworkCache* cache) {
|
|
||||||
if (QThread::currentThread() != thread()) {
|
|
||||||
QMetaObject::invokeMethod(this,
|
|
||||||
"setCache",
|
|
||||||
Qt::BlockingQueuedConnection,
|
|
||||||
Q_ARG(QAbstractNetworkCache*, cache));
|
|
||||||
}
|
|
||||||
QNetworkAccessManager::setCache(cache);
|
|
||||||
}
|
|
|
@ -13,32 +13,16 @@
|
||||||
#define hifi_NetworkAccessManager_h
|
#define hifi_NetworkAccessManager_h
|
||||||
|
|
||||||
#include <QNetworkAccessManager>
|
#include <QNetworkAccessManager>
|
||||||
#include <QNetworkConfiguration>
|
|
||||||
#include <QNetworkProxy>
|
|
||||||
|
|
||||||
/// Wrapper around QNetworkAccessManager wo that we only use one instance
|
/// Wrapper around QNetworkAccessManager to restrict at one instance by thread
|
||||||
/// For any other method you should need, make sure to be on the right thread
|
|
||||||
/// or if it is not but is a slot, use QMetaObject::invokeMethod()
|
|
||||||
/// In the case what you want to call isn't a slot and you aren't on the same thread,
|
|
||||||
/// then add then method to the method to the wrapper with the Q_INVKABLE flag
|
|
||||||
class NetworkAccessManager : public QNetworkAccessManager {
|
class NetworkAccessManager : public QNetworkAccessManager {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
static NetworkAccessManager& getInstance();
|
static NetworkAccessManager& getInstance();
|
||||||
|
|
||||||
Q_INVOKABLE QNetworkReply* get(const QNetworkRequest& request);
|
|
||||||
Q_INVOKABLE QNetworkReply* head(const QNetworkRequest& request);
|
|
||||||
Q_INVOKABLE QNetworkReply* post(const QNetworkRequest& request, QIODevice* data);
|
|
||||||
Q_INVOKABLE QNetworkReply* post(const QNetworkRequest& request, const QByteArray& data);
|
|
||||||
Q_INVOKABLE QNetworkReply* post(const QNetworkRequest& request, QHttpMultiPart* multiPart);
|
|
||||||
Q_INVOKABLE QNetworkReply* put(const QNetworkRequest& request, QIODevice* data);
|
|
||||||
Q_INVOKABLE QNetworkReply* put(const QNetworkRequest& request, QHttpMultiPart* multiPart);
|
|
||||||
Q_INVOKABLE QNetworkReply* put(const QNetworkRequest& request, const QByteArray& data);
|
|
||||||
Q_INVOKABLE QNetworkReply* sendCustomRequest(const QNetworkRequest& request, const QByteArray& verb, QIODevice* data = 0);
|
|
||||||
Q_INVOKABLE void setCache(QAbstractNetworkCache* cache);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
NetworkAccessManager();
|
NetworkAccessManager();
|
||||||
|
Q_DISABLE_COPY(NetworkAccessManager)
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_NetworkAccessManager_h
|
#endif // hifi_NetworkAccessManager_h
|
Loading…
Reference in a new issue