From 1df0dce971d066dc3b6b42d021b616753ae71c01 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 8 Apr 2016 14:38:26 -0700 Subject: [PATCH] use ResourceRequest in Agent to handle ATP scripts --- assignment-client/src/Agent.cpp | 53 +++++++++++--------- assignment-client/src/Agent.h | 2 +- libraries/networking/src/ResourceRequest.cpp | 1 + 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 740f456595..dc35885f8d 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -164,52 +164,57 @@ void Agent::requestScript() { scriptURL = QUrl(_payload); } - // setup a network access manager and - QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); + // make sure this is not a script request for the file scheme + if (scriptURL.scheme() == URL_SCHEME_FILE) { + qWarning() << "Cannot load script for Agent from local filesystem."; + scriptRequestFinished(); + return; + } - QNetworkDiskCache* cache = new QNetworkDiskCache(); - QString cachePath = QStandardPaths::writableLocation(QStandardPaths::DataLocation); - cache->setCacheDirectory(!cachePath.isEmpty() ? cachePath : "agentCache"); - networkAccessManager.setCache(cache); + auto request = ResourceManager::createResourceRequest(this, scriptURL); - QNetworkRequest networkRequest = QNetworkRequest(scriptURL); - networkRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); + if (!request) { + qWarning() << "Could not create ResourceRequest for Agent script at" << scriptURL.toString(); + scriptRequestFinished(); + return; + } // setup a timeout for script request static const int SCRIPT_TIMEOUT_MS = 10000; - _scriptRequestTimeout = new QTimer(this); - connect(_scriptRequestTimeout, &QTimer::timeout, this, &Agent::scriptRequestFinished); - _scriptRequestTimeout->start(SCRIPT_TIMEOUT_MS); + connect(&_scriptRequestTimeout, &QTimer::timeout, this, &Agent::scriptRequestFinished); + _scriptRequestTimeout.start(SCRIPT_TIMEOUT_MS); + + connect(request, &ResourceRequest::finished, this, &Agent::scriptRequestFinished); - qDebug() << "Downloading script at" << scriptURL.toString(); - QNetworkReply* reply = networkAccessManager.get(networkRequest); - connect(reply, &QNetworkReply::finished, this, &Agent::scriptRequestFinished); + qInfo() << "Requesting script at URL" << qPrintable(request->getUrl().toString()); + + request->send(); } void Agent::scriptRequestFinished() { - auto reply = qobject_cast(sender()); + auto request = qobject_cast(sender()); - _scriptRequestTimeout->stop(); + _scriptRequestTimeout.stop(); - if (reply && reply->error() == QNetworkReply::NoError) { - _scriptContents = reply->readAll(); - qDebug() << "Downloaded script:" << _scriptContents; + if (request && request->getResult() == ResourceRequest::Success) { + _scriptContents = request->getData(); + qInfo() << "Downloaded script:" << _scriptContents; // we could just call executeScript directly - we use a QueuedConnection to allow scriptRequestFinished // to return before calling executeScript QMetaObject::invokeMethod(this, "executeScript", Qt::QueuedConnection); } else { - if (reply) { - qDebug() << "Failed to download script at" << reply->url().toString() << " - bailing on assignment."; - qDebug() << "QNetworkReply error was" << reply->errorString(); + if (request) { + qWarning() << "Failed to download script at" << request->getUrl().toString() << " - bailing on assignment."; + qWarning() << "ResourceRequest error was" << request->getResult(); } else { - qDebug() << "Failed to download script - request timed out. Bailing on assignment."; + qWarning() << "Failed to download script - request timed out. Bailing on assignment."; } setFinished(true); } - reply->deleteLater(); + request->deleteLater(); } void Agent::executeScript() { diff --git a/assignment-client/src/Agent.h b/assignment-client/src/Agent.h index d86b99db33..8fb6c10f0b 100644 --- a/assignment-client/src/Agent.h +++ b/assignment-client/src/Agent.h @@ -83,7 +83,7 @@ private: void sendAvatarBillboardPacket(); QString _scriptContents; - QTimer* _scriptRequestTimeout { nullptr }; + QTimer _scriptRequestTimeout; bool _isListeningToAudioStream = false; SharedSoundPointer _avatarSound; int _numAvatarSoundSentBytes = 0; diff --git a/libraries/networking/src/ResourceRequest.cpp b/libraries/networking/src/ResourceRequest.cpp index e6402d6b25..bce6af7091 100644 --- a/libraries/networking/src/ResourceRequest.cpp +++ b/libraries/networking/src/ResourceRequest.cpp @@ -20,6 +20,7 @@ void ResourceRequest::send() { QMetaObject::invokeMethod(this, "send", Qt::QueuedConnection); return; } + Q_ASSERT(_state == NotStarted); _state = InProgress;