mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 12:09:52 +02:00
hold download of ATP script if Asset Server isn't ready
This commit is contained in:
parent
1df0dce971
commit
bf3324fc6b
2 changed files with 39 additions and 5 deletions
|
@ -144,6 +144,9 @@ void Agent::run() {
|
||||||
connect(messagesThread, &QThread::started, messagesClient.data(), &MessagesClient::init);
|
connect(messagesThread, &QThread::started, messagesClient.data(), &MessagesClient::init);
|
||||||
messagesThread->start();
|
messagesThread->start();
|
||||||
|
|
||||||
|
// make sure we hear about connected nodes so we can grab an ATP script if a request is pending
|
||||||
|
connect(nodeList.data(), &LimitedNodeList::nodeActivated, this, &Agent::nodeActivated);
|
||||||
|
|
||||||
nodeList->addSetOfNodeTypesToNodeInterestSet({
|
nodeList->addSetOfNodeTypesToNodeInterestSet({
|
||||||
NodeType::AudioMixer, NodeType::AvatarMixer, NodeType::EntityServer, NodeType::MessagesMixer, NodeType::AssetServer
|
NodeType::AudioMixer, NodeType::AvatarMixer, NodeType::EntityServer, NodeType::MessagesMixer, NodeType::AssetServer
|
||||||
});
|
});
|
||||||
|
@ -181,20 +184,48 @@ void Agent::requestScript() {
|
||||||
|
|
||||||
// setup a timeout for script request
|
// setup a timeout for script request
|
||||||
static const int SCRIPT_TIMEOUT_MS = 10000;
|
static const int SCRIPT_TIMEOUT_MS = 10000;
|
||||||
connect(&_scriptRequestTimeout, &QTimer::timeout, this, &Agent::scriptRequestFinished);
|
_scriptRequestTimeout = new QTimer;
|
||||||
_scriptRequestTimeout.start(SCRIPT_TIMEOUT_MS);
|
connect(_scriptRequestTimeout, &QTimer::timeout, this, &Agent::scriptRequestFinished);
|
||||||
|
_scriptRequestTimeout->start(SCRIPT_TIMEOUT_MS);
|
||||||
|
|
||||||
connect(request, &ResourceRequest::finished, this, &Agent::scriptRequestFinished);
|
connect(request, &ResourceRequest::finished, this, &Agent::scriptRequestFinished);
|
||||||
|
|
||||||
|
if (scriptURL.scheme() == URL_SCHEME_ATP) {
|
||||||
|
// we have an ATP URL for the script - if we're not currently connected to the AssetServer
|
||||||
|
// then wait for the nodeConnected signal to fire off the request
|
||||||
|
|
||||||
|
auto assetServer = nodeList->soloNodeOfType(NodeType::AssetServer);
|
||||||
|
if (!assetServer || assetServer->getActiveSocket()) {
|
||||||
|
qDebug() << "Waiting to connect to Asset Server for ATP script download.";
|
||||||
|
_pendingScriptRequest = request;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
qInfo() << "Requesting script at URL" << qPrintable(request->getUrl().toString());
|
qInfo() << "Requesting script at URL" << qPrintable(request->getUrl().toString());
|
||||||
|
|
||||||
request->send();
|
request->send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Agent::nodeActivated(SharedNodePointer activatedNode) {
|
||||||
|
if (_pendingScriptRequest) {
|
||||||
|
qInfo() << "Requesting script at URL" << qPrintable(_pendingScriptRequest->getUrl().toString());
|
||||||
|
|
||||||
|
_pendingScriptRequest->send();
|
||||||
|
|
||||||
|
_pendingScriptRequest = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Agent::scriptRequestFinished() {
|
void Agent::scriptRequestFinished() {
|
||||||
auto request = qobject_cast<ResourceRequest*>(sender());
|
auto request = qobject_cast<ResourceRequest*>(sender());
|
||||||
|
|
||||||
_scriptRequestTimeout.stop();
|
// stop the script request timeout, if it's running
|
||||||
|
if (_scriptRequestTimeout) {
|
||||||
|
QMetaObject::invokeMethod(_scriptRequestTimeout, "stop");
|
||||||
|
_scriptRequestTimeout->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
if (request && request->getResult() == ResourceRequest::Success) {
|
if (request && request->getResult() == ResourceRequest::Success) {
|
||||||
_scriptContents = request->getData();
|
_scriptContents = request->getData();
|
||||||
|
|
|
@ -69,6 +69,8 @@ private slots:
|
||||||
|
|
||||||
void processAgentAvatarAndAudio(float deltaTime);
|
void processAgentAvatarAndAudio(float deltaTime);
|
||||||
|
|
||||||
|
void nodeActivated(SharedNodePointer activatedNode);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<ScriptEngine> _scriptEngine;
|
std::unique_ptr<ScriptEngine> _scriptEngine;
|
||||||
EntityEditPacketSender _entityEditSender;
|
EntityEditPacketSender _entityEditSender;
|
||||||
|
@ -83,7 +85,8 @@ private:
|
||||||
void sendAvatarBillboardPacket();
|
void sendAvatarBillboardPacket();
|
||||||
|
|
||||||
QString _scriptContents;
|
QString _scriptContents;
|
||||||
QTimer _scriptRequestTimeout;
|
QTimer* _scriptRequestTimeout { nullptr };
|
||||||
|
ResourceRequest* _pendingScriptRequest { nullptr };
|
||||||
bool _isListeningToAudioStream = false;
|
bool _isListeningToAudioStream = false;
|
||||||
SharedSoundPointer _avatarSound;
|
SharedSoundPointer _avatarSound;
|
||||||
int _numAvatarSoundSentBytes = 0;
|
int _numAvatarSoundSentBytes = 0;
|
||||||
|
|
Loading…
Reference in a new issue