mirror of
https://github.com/overte-org/overte.git
synced 2025-04-11 05:22:11 +02:00
Enable serverless domains via HTTP and HTTPS
This commit is contained in:
parent
486c7bde5b
commit
46173439ed
5 changed files with 44 additions and 25 deletions
|
@ -4059,7 +4059,7 @@ void Application::setIsServerlessMode(bool serverlessDomain) {
|
|||
}
|
||||
}
|
||||
|
||||
std::map<QString, QString> Application::prepareServerlessDomainContents(QUrl domainURL) {
|
||||
std::map<QString, QString> Application::prepareServerlessDomainContents(QUrl domainURL, QByteArray data) {
|
||||
QUuid serverlessSessionID = QUuid::createUuid();
|
||||
getMyAvatar()->setSessionUUID(serverlessSessionID);
|
||||
auto nodeList = DependencyManager::get<NodeList>();
|
||||
|
@ -4070,14 +4070,13 @@ std::map<QString, QString> Application::prepareServerlessDomainContents(QUrl dom
|
|||
permissions.setAll(true);
|
||||
nodeList->setPermissions(permissions);
|
||||
|
||||
// we can't import directly into the main tree because we would need to lock it, and
|
||||
// Octree::readFromURL calls loop.exec which can run code which will also attempt to lock the tree.
|
||||
// FIXME: Lock the main tree and import directly into it.
|
||||
EntityTreePointer tmpTree(new EntityTree());
|
||||
tmpTree->setIsServerlessMode(true);
|
||||
tmpTree->createRootElement();
|
||||
auto myAvatar = getMyAvatar();
|
||||
tmpTree->setMyAvatar(myAvatar);
|
||||
bool success = tmpTree->readFromURL(domainURL.toString());
|
||||
bool success = tmpTree->readFromByteArray(domainURL.toString(), data);
|
||||
if (success) {
|
||||
tmpTree->reaverageOctreeElements();
|
||||
tmpTree->sendEntities(&_entityEditSender, getEntities()->getTree(), 0, 0, 0);
|
||||
|
@ -4100,12 +4099,26 @@ void Application::loadServerlessDomain(QUrl domainURL) {
|
|||
return;
|
||||
}
|
||||
|
||||
auto namedPaths = prepareServerlessDomainContents(domainURL);
|
||||
auto nodeList = DependencyManager::get<NodeList>();
|
||||
QString trimmedUrl = domainURL.toString().trimmed();
|
||||
bool DEFAULT_IS_OBSERVABLE = true;
|
||||
const qint64 DEFAULT_CALLER_ID = -1;
|
||||
auto request = DependencyManager::get<ResourceManager>()->createResourceRequest(
|
||||
this, trimmedUrl, DEFAULT_IS_OBSERVABLE, DEFAULT_CALLER_ID, "Application::loadServerlessDomain");
|
||||
|
||||
nodeList->getDomainHandler().connectedToServerless(namedPaths);
|
||||
if (!request) {
|
||||
return;
|
||||
}
|
||||
|
||||
_fullSceneReceivedCounter++;
|
||||
connect(request, &ResourceRequest::finished, this, [=]() {
|
||||
if (request->getResult() == ResourceRequest::Success) {
|
||||
auto namedPaths = prepareServerlessDomainContents(domainURL, request->getData());
|
||||
auto nodeList = DependencyManager::get<NodeList>();
|
||||
nodeList->getDomainHandler().connectedToServerless(namedPaths);
|
||||
_fullSceneReceivedCounter++;
|
||||
}
|
||||
request->deleteLater();
|
||||
});
|
||||
request->send();
|
||||
}
|
||||
|
||||
void Application::loadErrorDomain(QUrl domainURL) {
|
||||
|
@ -4114,16 +4127,7 @@ void Application::loadErrorDomain(QUrl domainURL) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (domainURL.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto namedPaths = prepareServerlessDomainContents(domainURL);
|
||||
auto nodeList = DependencyManager::get<NodeList>();
|
||||
|
||||
nodeList->getDomainHandler().loadedErrorDomain(namedPaths);
|
||||
|
||||
_fullSceneReceivedCounter++;
|
||||
loadServerlessDomain(domainURL);
|
||||
}
|
||||
|
||||
bool Application::importImage(const QString& urlString) {
|
||||
|
|
|
@ -464,7 +464,7 @@ public slots:
|
|||
void setPreferredCursor(const QString& cursor);
|
||||
|
||||
void setIsServerlessMode(bool serverlessDomain);
|
||||
std::map<QString, QString> prepareServerlessDomainContents(QUrl domainURL);
|
||||
std::map<QString, QString> prepareServerlessDomainContents(QUrl domainURL, QByteArray data);
|
||||
|
||||
void loadServerlessDomain(QUrl domainURL);
|
||||
void loadErrorDomain(QUrl domainURL);
|
||||
|
|
|
@ -358,11 +358,8 @@ bool AddressManager::handleUrl(const QUrl& lookupUrlIn, LookupTrigger trigger) {
|
|||
emit lookupResultsFinished();
|
||||
|
||||
return true;
|
||||
} else if (lookupUrl.scheme() == HIFI_URL_SCHEME_FILE) {
|
||||
// TODO -- once Octree::readFromURL no-longer takes over the main event-loop, serverless-domain urls can
|
||||
// be loaded over http(s)
|
||||
// lookupUrl.scheme() == URL_SCHEME_HTTP ||
|
||||
// lookupUrl.scheme() == HIFI_URL_SCHEME_HTTPS ||
|
||||
} else if (lookupUrl.scheme() == HIFI_URL_SCHEME_FILE || lookupUrl.scheme() == HIFI_URL_SCHEME_HTTPS
|
||||
|| lookupUrl.scheme() == HIFI_URL_SCHEME_HTTP) {
|
||||
// TODO once a file can return a connection refusal if there were to be some kind of load error, we'd
|
||||
// need to store the previous domain tried in _lastVisitedURL. For now , do not store it.
|
||||
|
||||
|
|
|
@ -738,7 +738,6 @@ bool Octree::readFromURL(
|
|||
) {
|
||||
QString trimmedUrl = urlString.trimmed();
|
||||
QString marketplaceID = getMarketplaceID(trimmedUrl);
|
||||
qDebug() << "!!!!! going to createResourceRequest " << callerId;
|
||||
auto request = std::unique_ptr<ResourceRequest>(
|
||||
DependencyManager::get<ResourceManager>()->createResourceRequest(
|
||||
this, trimmedUrl, isObservable, callerId, "Octree::readFromURL"));
|
||||
|
@ -770,6 +769,24 @@ bool Octree::readFromURL(
|
|||
return readFromStream(data.size(), inputStream, marketplaceID);
|
||||
}
|
||||
|
||||
bool Octree::readFromByteArray(
|
||||
const QString& urlString,
|
||||
const QByteArray& data
|
||||
) {
|
||||
QString trimmedUrl = urlString.trimmed();
|
||||
QString marketplaceID = getMarketplaceID(trimmedUrl);
|
||||
|
||||
QByteArray uncompressedJsonData;
|
||||
bool wasCompressed = gunzip(data, uncompressedJsonData);
|
||||
|
||||
if (wasCompressed) {
|
||||
QDataStream inputStream(uncompressedJsonData);
|
||||
return readFromStream(uncompressedJsonData.size(), inputStream, marketplaceID);
|
||||
}
|
||||
|
||||
QDataStream inputStream(data);
|
||||
return readFromStream(data.size(), inputStream, marketplaceID);
|
||||
}
|
||||
|
||||
bool Octree::readFromStream(
|
||||
uint64_t streamLength,
|
||||
|
|
|
@ -217,6 +217,7 @@ public:
|
|||
// Octree importers
|
||||
bool readFromFile(const char* filename);
|
||||
bool readFromURL(const QString& url, const bool isObservable = true, const qint64 callerId = -1); // will support file urls as well...
|
||||
bool readFromByteArray(const QString& url, const QByteArray& byteArray);
|
||||
bool readFromStream(uint64_t streamLength, QDataStream& inputStream, const QString& marketplaceID="");
|
||||
bool readSVOFromStream(uint64_t streamLength, QDataStream& inputStream);
|
||||
bool readJSONFromStream(uint64_t streamLength, QDataStream& inputStream, const QString& marketplaceID="");
|
||||
|
|
Loading…
Reference in a new issue