mirror of
https://github.com/overte-org/overte.git
synced 2025-08-05 05:50:19 +02:00
make domain-manager and pals be still when interface is in serverless mode
This commit is contained in:
parent
0f4b68c038
commit
17e2db96c6
6 changed files with 100 additions and 30 deletions
|
@ -339,6 +339,8 @@ static const QString SNAPSHOT_EXTENSION = ".jpg";
|
|||
static const QString JPG_EXTENSION = ".jpg";
|
||||
static const QString PNG_EXTENSION = ".png";
|
||||
static const QString SVO_EXTENSION = ".svo";
|
||||
static const QString SERVERLESS_DOMAIN_EXTENSION = ".domain.json";
|
||||
static const QString SERVERLESS_DOMAIN_GZ_EXTENSION = ".domain.json.gz";
|
||||
static const QString SVO_JSON_EXTENSION = ".svo.json";
|
||||
static const QString JSON_GZ_EXTENSION = ".json.gz";
|
||||
static const QString JSON_EXTENSION = ".json";
|
||||
|
@ -349,8 +351,6 @@ static const QString OBJ_EXTENSION = ".obj";
|
|||
static const QString AVA_JSON_EXTENSION = ".ava.json";
|
||||
static const QString WEB_VIEW_TAG = "noDownload=true";
|
||||
static const QString ZIP_EXTENSION = ".zip";
|
||||
static const QString SERVERLESS_DOMAIN_EXTENSION = ".domain.json";
|
||||
static const QString SERVERLESS_DOMAIN_GZ_EXTENSION = ".domain.json.gz";
|
||||
|
||||
static const float MIRROR_FULLSCREEN_DISTANCE = 0.389f;
|
||||
|
||||
|
@ -382,13 +382,13 @@ const QHash<QString, Application::AcceptURLMethod> Application::_acceptedExtensi
|
|||
{ SVO_EXTENSION, &Application::importSVOFromURL },
|
||||
{ SVO_JSON_EXTENSION, &Application::importSVOFromURL },
|
||||
{ AVA_JSON_EXTENSION, &Application::askToWearAvatarAttachmentUrl },
|
||||
{ SERVERLESS_DOMAIN_EXTENSION, &Application::visitServerlessDomain },
|
||||
{ SERVERLESS_DOMAIN_GZ_EXTENSION, &Application::visitServerlessDomain },
|
||||
{ JSON_EXTENSION, &Application::importJSONFromURL },
|
||||
{ JS_EXTENSION, &Application::askToLoadScript },
|
||||
{ FST_EXTENSION, &Application::askToSetAvatarUrl },
|
||||
{ JSON_GZ_EXTENSION, &Application::askToReplaceDomainContent },
|
||||
{ ZIP_EXTENSION, &Application::importFromZIP },
|
||||
{ SERVERLESS_DOMAIN_EXTENSION, &Application::visitServerlessDomain },
|
||||
{ SERVERLESS_DOMAIN_GZ_EXTENSION, &Application::visitServerlessDomain },
|
||||
{ JPG_EXTENSION, &Application::importImage },
|
||||
{ PNG_EXTENSION, &Application::importImage }
|
||||
};
|
||||
|
@ -1086,6 +1086,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
|
|||
connect(addressManager.data(), &AddressManager::hostChanged, this, &Application::updateWindowTitle);
|
||||
connect(this, &QCoreApplication::aboutToQuit, addressManager.data(), &AddressManager::storeCurrentAddress);
|
||||
|
||||
connect(addressManager.data(), &AddressManager::setServersEnabled, this, &Application::setServersEnabled);
|
||||
|
||||
connect(this, &Application::activeDisplayPluginChanged, this, &Application::updateThreadPoolCount);
|
||||
connect(this, &Application::activeDisplayPluginChanged, this, [](){
|
||||
qApp->setProperty(hifi::properties::HMD, qApp->isHMDMode());
|
||||
|
@ -2944,9 +2946,25 @@ bool Application::importFromZIP(const QString& filePath) {
|
|||
return true;
|
||||
}
|
||||
|
||||
void Application::setServersEnabled(bool serversEnabled) {
|
||||
qDebug() << "QQQQ serversEnabled =" << serversEnabled;
|
||||
if (_serversEnabled != serversEnabled) {
|
||||
_serversEnabled = serversEnabled;
|
||||
|
||||
auto nodeList = DependencyManager::get<NodeList>();
|
||||
nodeList->getDomainHandler().setAPIRefreshTimerEnabled(serversEnabled);
|
||||
|
||||
if (!_serversEnabled) {
|
||||
nodeList->reset();
|
||||
clearDomainOctreeDetails();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Application::visitServerlessDomain(const QString& urlString) {
|
||||
qDebug() << "QQQQ visit serverless domain" << urlString;
|
||||
setServerlessMode(true);
|
||||
DependencyManager::get<AddressManager>()->handleLookupString(urlString);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Application::importImage(const QString& urlString) {
|
||||
|
@ -5597,10 +5615,15 @@ void Application::updateWindowTitle() const {
|
|||
|
||||
QString connectionStatus = nodeList->getDomainHandler().isConnected() ? "" : " (NOT CONNECTED)";
|
||||
QString username = accountManager->getAccountInfo().getUsername();
|
||||
QString currentPlaceName = DependencyManager::get<AddressManager>()->getHost();
|
||||
|
||||
if (currentPlaceName.isEmpty()) {
|
||||
currentPlaceName = nodeList->getDomainHandler().getHostname();
|
||||
QString currentPlaceName;
|
||||
if (isServerlessMode()) {
|
||||
currentPlaceName = "serverless"; // XXX filename?
|
||||
} else {
|
||||
currentPlaceName = DependencyManager::get<AddressManager>()->getHost();
|
||||
if (currentPlaceName.isEmpty()) {
|
||||
currentPlaceName = nodeList->getDomainHandler().getHostname();
|
||||
}
|
||||
}
|
||||
|
||||
QString title = QString() + (!username.isEmpty() ? username + " @ " : QString())
|
||||
|
|
|
@ -286,8 +286,7 @@ public:
|
|||
bool getSaveAvatarOverrideUrl() { return _saveAvatarOverrideUrl; }
|
||||
void saveNextPhysicsStats(QString filename);
|
||||
|
||||
bool isServerlessMode() { return _serverlessMode; }
|
||||
void setServerlessMode(bool serverlessMode) { _serverlessMode = serverlessMode; }
|
||||
bool isServerlessMode() const { return !_serversEnabled; }
|
||||
|
||||
signals:
|
||||
void svoImportRequested(const QString& url);
|
||||
|
@ -393,6 +392,8 @@ public slots:
|
|||
const QString getPreferredCursor() const { return _preferredCursor.get(); }
|
||||
void setPreferredCursor(const QString& cursor);
|
||||
|
||||
void setServersEnabled(bool enableServers);
|
||||
|
||||
private slots:
|
||||
void onDesktopRootItemCreated(QQuickItem* qmlContext);
|
||||
void onDesktopRootContextCreated(QQmlContext* qmlContext);
|
||||
|
@ -717,6 +718,6 @@ private:
|
|||
std::atomic<bool> _pendingIdleEvent { true };
|
||||
std::atomic<bool> _pendingRenderEvent { true };
|
||||
|
||||
bool _serverlessMode { false };
|
||||
bool _serversEnabled { true };
|
||||
};
|
||||
#endif // hifi_Application_h
|
||||
|
|
|
@ -207,8 +207,13 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl, LookupTrigger trigger) {
|
|||
static QString URL_TYPE_DOMAIN_ID = "domain_id";
|
||||
static QString URL_TYPE_PLACE = "place";
|
||||
static QString URL_TYPE_NETWORK_ADDRESS = "network_address";
|
||||
|
||||
qDebug() << "QQQQ handleUrl: " << lookupUrl.toString();
|
||||
|
||||
if (lookupUrl.scheme() == HIFI_URL_SCHEME) {
|
||||
|
||||
emit setServersEnabled(true);
|
||||
|
||||
qCDebug(networking) << "Trying to go to URL" << lookupUrl.toString();
|
||||
|
||||
DependencyManager::get<NodeList>()->flagTimeForConnectionStep(LimitedNodeList::ConnectionStep::LookupAddress);
|
||||
|
@ -233,8 +238,9 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl, LookupTrigger trigger) {
|
|||
// we're assuming this is either a network address or global place name
|
||||
// check if it is a network address first
|
||||
bool hostChanged;
|
||||
if (handleNetworkAddress(lookupUrl.host()
|
||||
+ (lookupUrl.port() == -1 ? "" : ":" + QString::number(lookupUrl.port())), trigger, hostChanged)) {
|
||||
if (handleNetworkAddress(lookupUrl.host() +
|
||||
(lookupUrl.port() == -1 ? "" : ":" + QString::number(lookupUrl.port())),
|
||||
trigger, hostChanged)) {
|
||||
|
||||
UserActivityLogger::getInstance().wentTo(trigger, URL_TYPE_NETWORK_ADDRESS, lookupUrl.toString());
|
||||
|
||||
|
@ -274,40 +280,64 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl, LookupTrigger trigger) {
|
|||
attemptPlaceNameLookup(lookupUrl.host(), lookupUrl.path(), trigger);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
} else if (lookupUrl.toString().startsWith('/')) {
|
||||
qCDebug(networking) << "Going to relative path" << lookupUrl.path();
|
||||
|
||||
qCDebug(networking) << "Going to relative path" << lookupUrl.path();
|
||||
// a path lookup clears the previous lookup since we don't expect to re-attempt it
|
||||
_previousLookup.clear();
|
||||
|
||||
// if this is a relative path then handle it as a relative viewpoint
|
||||
handlePath(lookupUrl.path(), trigger, true);
|
||||
emit lookupResultsFinished();
|
||||
|
||||
return true;
|
||||
|
||||
} else if (lookupUrl.scheme() == "http" || lookupUrl.scheme() == "https") {
|
||||
|
||||
qDebug() << "QQQQ do http before serverless domain" << lookupUrl.toString();
|
||||
emit setServersEnabled(false);
|
||||
emit lookupResultsFinished();
|
||||
return true;
|
||||
|
||||
} else if (lookupUrl.scheme() == "file") {
|
||||
|
||||
qDebug() << "QQQQ load serverless domain " << lookupUrl.toString();
|
||||
emit setServersEnabled(false);
|
||||
emit lookupResultsFinished();
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool isPossiblePlaceName(QString possiblePlaceName) {
|
||||
bool result { false };
|
||||
int len = possiblePlaceName.length();
|
||||
if (possiblePlaceName != "localhost" && len >= 4 && len <= 64) {
|
||||
const QRegExp PLACE_NAME_REGEX = QRegExp("^[0-9A-Za-z](([0-9A-Za-z]|-(?!-))*[^\\W_]$|$)");
|
||||
result = PLACE_NAME_REGEX.indexIn(possiblePlaceName) == 0;
|
||||
}
|
||||
qDebug() << "isPossiblePlaceName: " << possiblePlaceName << " " << result;
|
||||
return result;
|
||||
}
|
||||
|
||||
void AddressManager::handleLookupString(const QString& lookupString, bool fromSuggestions) {
|
||||
if (!lookupString.isEmpty()) {
|
||||
// make this a valid hifi URL and handle it off to handleUrl
|
||||
QString sanitizedString = lookupString.trimmed();
|
||||
QUrl lookupURL;
|
||||
|
||||
if (!lookupString.startsWith('/')) {
|
||||
if (lookupString.toLower().startsWith(HIFI_URL_SCHEME + ":/") || isPossiblePlaceName(sanitizedString)) {
|
||||
// sometimes we need to handle lookupStrings like hifi:/somewhere
|
||||
const QRegExp HIFI_SCHEME_REGEX = QRegExp(HIFI_URL_SCHEME + ":\\/{1,2}", Qt::CaseInsensitive);
|
||||
sanitizedString = sanitizedString.remove(HIFI_SCHEME_REGEX);
|
||||
|
||||
lookupURL = QUrl(HIFI_URL_SCHEME + "://" + sanitizedString);
|
||||
} else {
|
||||
lookupURL = QUrl(lookupString);
|
||||
sanitizedString = HIFI_URL_SCHEME + "://" + sanitizedString;
|
||||
}
|
||||
|
||||
lookupURL = QUrl(sanitizedString);
|
||||
qDebug() << "QQQQ handleLookupString: " << lookupString << " " << lookupURL.toString();
|
||||
|
||||
handleUrl(lookupURL, fromSuggestions ? Suggestions : UserInput);
|
||||
}
|
||||
}
|
||||
|
@ -426,7 +456,7 @@ void AddressManager::goToAddressFromObject(const QVariantMap& dataObject, const
|
|||
if (setHost(domainIDString, trigger)) {
|
||||
trigger = LookupTrigger::Internal;
|
||||
}
|
||||
|
||||
|
||||
// this isn't a place, so clear the place name
|
||||
_placeName.clear();
|
||||
}
|
||||
|
@ -664,8 +694,8 @@ bool AddressManager::handleViewpoint(const QString& viewpointString, bool should
|
|||
qCDebug(networking) << "Orientation parsed from lookup string is invalid. Will not use for location change.";
|
||||
}
|
||||
}
|
||||
|
||||
emit locationChangeRequired(newPosition, orientationChanged,
|
||||
|
||||
emit locationChangeRequired(newPosition, orientationChanged,
|
||||
trigger == LookupTrigger::VisitUserFromPAL ? cancelOutRollAndPitch(newOrientation): newOrientation,
|
||||
shouldFace
|
||||
);
|
||||
|
@ -697,7 +727,7 @@ bool AddressManager::handleUsername(const QString& lookupString) {
|
|||
|
||||
bool AddressManager::setHost(const QString& host, LookupTrigger trigger, quint16 port) {
|
||||
if (host != _host || port != _port) {
|
||||
|
||||
|
||||
addCurrentAddressToHistory(trigger);
|
||||
|
||||
_port = port;
|
||||
|
|
|
@ -369,7 +369,7 @@ signals:
|
|||
* location.pathChangeRequired.connect(onPathChangeRequired);
|
||||
*/
|
||||
void pathChangeRequired(const QString& newPath);
|
||||
|
||||
|
||||
/**jsdoc
|
||||
* Triggered when you navigate to a new domain.
|
||||
* @function location.hostChanged
|
||||
|
@ -416,6 +416,9 @@ signals:
|
|||
*/
|
||||
void goForwardPossible(bool isPossible);
|
||||
|
||||
void setServersEnabled(bool serversEnabled);
|
||||
|
||||
|
||||
protected:
|
||||
AddressManager();
|
||||
private slots:
|
||||
|
|
|
@ -38,7 +38,7 @@ DomainHandler::DomainHandler(QObject* parent) :
|
|||
|
||||
// if we get a socket that make sure our NetworkPeer ping timer stops
|
||||
connect(this, &DomainHandler::completedSocketDiscovery, &_icePeer, &NetworkPeer::stopPingTimer);
|
||||
|
||||
|
||||
// setup a timeout for failure on settings requests
|
||||
static const int DOMAIN_SETTINGS_TIMEOUT_MS = 5000;
|
||||
_settingsTimer.setInterval(DOMAIN_SETTINGS_TIMEOUT_MS); // 5s, Qt::CoarseTimer acceptable
|
||||
|
@ -48,13 +48,23 @@ DomainHandler::DomainHandler(QObject* parent) :
|
|||
const int API_REFRESH_TIMEOUT_MSEC = 2500;
|
||||
_apiRefreshTimer.setInterval(API_REFRESH_TIMEOUT_MSEC); // 2.5s, Qt::CoarseTimer acceptable
|
||||
|
||||
auto addressManager = DependencyManager::get<AddressManager>();
|
||||
connect(&_apiRefreshTimer, &QTimer::timeout, addressManager.data(), &AddressManager::refreshPreviousLookup);
|
||||
connect(&_apiRefreshTimer, &QTimer::timeout, [this] {
|
||||
if (_apiRefreshTimerEnabled) {
|
||||
auto addressManager = DependencyManager::get<AddressManager>();
|
||||
if (addressManager) {
|
||||
addressManager->refreshPreviousLookup();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// stop the refresh timer if we connect to a domain
|
||||
connect(this, &DomainHandler::connectedToDomain, &_apiRefreshTimer, &QTimer::stop);
|
||||
}
|
||||
|
||||
void DomainHandler::setAPIRefreshTimerEnabled(bool enabled) {
|
||||
_apiRefreshTimerEnabled = enabled;
|
||||
}
|
||||
|
||||
void DomainHandler::disconnect() {
|
||||
// if we're currently connected to a domain, send a disconnect packet on our way out
|
||||
if (_isConnected) {
|
||||
|
|
|
@ -138,6 +138,8 @@ public:
|
|||
TooManyUsers
|
||||
};
|
||||
|
||||
void setAPIRefreshTimerEnabled(bool enabled);
|
||||
|
||||
public slots:
|
||||
void setSocketAndID(const QString& hostname, quint16 port = DEFAULT_DOMAIN_SERVER_PORT, const QUuid& id = QUuid());
|
||||
void setIceServerHostnameAndID(const QString& iceServerHostname, const QUuid& id);
|
||||
|
@ -198,6 +200,7 @@ private:
|
|||
int _checkInPacketsSinceLastReply { 0 };
|
||||
|
||||
QTimer _apiRefreshTimer;
|
||||
bool _apiRefreshTimerEnabled { true };
|
||||
};
|
||||
|
||||
#endif // hifi_DomainHandler_h
|
||||
|
|
Loading…
Reference in a new issue