mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 06:23:06 +02:00
request domain settings after successful connection to domain
This commit is contained in:
parent
707db4f5d8
commit
6334116070
2 changed files with 67 additions and 1 deletions
|
@ -9,6 +9,8 @@
|
||||||
// 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 <QtCore/QJsonDocument>
|
||||||
|
|
||||||
#include "NodeList.h"
|
#include "NodeList.h"
|
||||||
#include "PacketHeaders.h"
|
#include "PacketHeaders.h"
|
||||||
#include "UserActivityLogger.h"
|
#include "UserActivityLogger.h"
|
||||||
|
@ -21,7 +23,9 @@ DomainHandler::DomainHandler(QObject* parent) :
|
||||||
_sockAddr(HifiSockAddr(QHostAddress::Null, DEFAULT_DOMAIN_SERVER_PORT)),
|
_sockAddr(HifiSockAddr(QHostAddress::Null, DEFAULT_DOMAIN_SERVER_PORT)),
|
||||||
_assignmentUUID(),
|
_assignmentUUID(),
|
||||||
_isConnected(false),
|
_isConnected(false),
|
||||||
_handshakeTimer(NULL)
|
_handshakeTimer(NULL),
|
||||||
|
_settingsObject(),
|
||||||
|
_failedSettingsRequests(0)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -37,8 +41,14 @@ void DomainHandler::clearConnectionInfo() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DomainHandler::clearSettings() {
|
||||||
|
_settingsObject = QJsonObject();
|
||||||
|
_failedSettingsRequests = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void DomainHandler::reset() {
|
void DomainHandler::reset() {
|
||||||
clearConnectionInfo();
|
clearConnectionInfo();
|
||||||
|
clearSettings();
|
||||||
_hostname = QString();
|
_hostname = QString();
|
||||||
_sockAddr.setAddress(QHostAddress::Null);
|
_sockAddr.setAddress(QHostAddress::Null);
|
||||||
}
|
}
|
||||||
|
@ -109,10 +119,58 @@ void DomainHandler::setIsConnected(bool isConnected) {
|
||||||
|
|
||||||
if (_isConnected) {
|
if (_isConnected) {
|
||||||
emit connectedToDomain(_hostname);
|
emit connectedToDomain(_hostname);
|
||||||
|
|
||||||
|
// we've connected to new domain - time to ask it for global settings
|
||||||
|
requestDomainSettings();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DomainHandler::requestDomainSettings() const {
|
||||||
|
|
||||||
|
// setup the URL required to grab settings JSON
|
||||||
|
QUrl settingsJSONURL;
|
||||||
|
settingsJSONURL.setScheme("http");
|
||||||
|
settingsJSONURL.setHost(_hostname);
|
||||||
|
settingsJSONURL.setPort(DOMAIN_SERVER_HTTP_PORT);
|
||||||
|
settingsJSONURL.setPath("/settings.json");
|
||||||
|
settingsJSONURL.setQuery(QString("type=%1").arg(NodeList::getInstance()->getOwnerType()));
|
||||||
|
|
||||||
|
qDebug() << settingsJSONURL;
|
||||||
|
|
||||||
|
QNetworkReply* reply = NetworkAccessManager::getInstance().get(QNetworkRequest(settingsJSONURL));
|
||||||
|
connect(reply, &QNetworkReply::finished, this, &DomainHandler::settingsRequestFinished);
|
||||||
|
}
|
||||||
|
|
||||||
|
const int MAX_SETTINGS_REQUEST_FAILED_ATTEMPTS = 5;
|
||||||
|
|
||||||
|
void DomainHandler::settingsRequestFinished() {
|
||||||
|
QNetworkReply* settingsReply = reinterpret_cast<QNetworkReply*>(sender());
|
||||||
|
|
||||||
|
if (settingsReply->error() == QNetworkReply::NoError) {
|
||||||
|
// parse the JSON to a QJsonObject and save it
|
||||||
|
_settingsObject = QJsonDocument::fromJson(settingsReply->readAll()).object();
|
||||||
|
|
||||||
|
qDebug() << settingsReply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
||||||
|
qDebug() << "Received domain settings.";
|
||||||
|
|
||||||
|
// reset failed settings requests to 0, we got them
|
||||||
|
_failedSettingsRequests = 0;
|
||||||
|
} else {
|
||||||
|
// error grabbing the settings - in some cases this means we are stuck
|
||||||
|
// so we should retry until we get it
|
||||||
|
qDebug() << "Error getting domain settings -" << settingsReply->errorString() << "- retrying";
|
||||||
|
|
||||||
|
if (++_failedSettingsRequests >= MAX_SETTINGS_REQUEST_FAILED_ATTEMPTS) {
|
||||||
|
qDebug() << "Failed to retreive domain-server settings" << MAX_SETTINGS_REQUEST_FAILED_ATTEMPTS << "times. Re-setting connection to domain.";
|
||||||
|
clearSettings();
|
||||||
|
clearConnectionInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
requestDomainSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DomainHandler::parseDTLSRequirementPacket(const QByteArray& dtlsRequirementPacket) {
|
void DomainHandler::parseDTLSRequirementPacket(const QByteArray& dtlsRequirementPacket) {
|
||||||
// figure out the port that the DS wants us to use for us to talk to them with DTLS
|
// figure out the port that the DS wants us to use for us to talk to them with DTLS
|
||||||
int numBytesPacketHeader = numBytesForPacketHeader(dtlsRequirementPacket);
|
int numBytesPacketHeader = numBytesForPacketHeader(dtlsRequirementPacket);
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#ifndef hifi_DomainHandler_h
|
#ifndef hifi_DomainHandler_h
|
||||||
#define hifi_DomainHandler_h
|
#define hifi_DomainHandler_h
|
||||||
|
|
||||||
|
#include <QtCore/QJsonObject>
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
#include <QtCore/QTimer>
|
#include <QtCore/QTimer>
|
||||||
#include <QtCore/QUuid>
|
#include <QtCore/QUuid>
|
||||||
|
@ -33,6 +34,7 @@ public:
|
||||||
DomainHandler(QObject* parent = 0);
|
DomainHandler(QObject* parent = 0);
|
||||||
|
|
||||||
void clearConnectionInfo();
|
void clearConnectionInfo();
|
||||||
|
void clearSettings();
|
||||||
|
|
||||||
const QUuid& getUUID() const { return _uuid; }
|
const QUuid& getUUID() const { return _uuid; }
|
||||||
void setUUID(const QUuid& uuid) { _uuid = uuid; }
|
void setUUID(const QUuid& uuid) { _uuid = uuid; }
|
||||||
|
@ -54,10 +56,14 @@ public:
|
||||||
bool isConnected() const { return _isConnected; }
|
bool isConnected() const { return _isConnected; }
|
||||||
void setIsConnected(bool isConnected);
|
void setIsConnected(bool isConnected);
|
||||||
|
|
||||||
|
bool hasSettings() const { return !_settingsObject.isEmpty(); }
|
||||||
|
void requestDomainSettings() const;
|
||||||
|
|
||||||
void parseDTLSRequirementPacket(const QByteArray& dtlsRequirementPacket);
|
void parseDTLSRequirementPacket(const QByteArray& dtlsRequirementPacket);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void completedHostnameLookup(const QHostInfo& hostInfo);
|
void completedHostnameLookup(const QHostInfo& hostInfo);
|
||||||
|
void settingsRequestFinished();
|
||||||
signals:
|
signals:
|
||||||
void hostnameChanged(const QString& hostname);
|
void hostnameChanged(const QString& hostname);
|
||||||
void connectedToDomain(const QString& hostname);
|
void connectedToDomain(const QString& hostname);
|
||||||
|
@ -71,6 +77,8 @@ private:
|
||||||
QUuid _assignmentUUID;
|
QUuid _assignmentUUID;
|
||||||
bool _isConnected;
|
bool _isConnected;
|
||||||
QTimer* _handshakeTimer;
|
QTimer* _handshakeTimer;
|
||||||
|
QJsonObject _settingsObject;
|
||||||
|
int _failedSettingsRequests;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_DomainHandler_h
|
#endif // hifi_DomainHandler_h
|
||||||
|
|
Loading…
Reference in a new issue