mirror of
https://thingvellir.net/git/overte
synced 2025-03-27 23:52:03 +01: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);
|
||||
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({
|
||||
NodeType::AudioMixer, NodeType::AvatarMixer, NodeType::EntityServer, NodeType::MessagesMixer, NodeType::AssetServer
|
||||
});
|
||||
|
@ -181,20 +184,48 @@ void Agent::requestScript() {
|
|||
|
||||
// setup a timeout for script request
|
||||
static const int SCRIPT_TIMEOUT_MS = 10000;
|
||||
connect(&_scriptRequestTimeout, &QTimer::timeout, this, &Agent::scriptRequestFinished);
|
||||
_scriptRequestTimeout.start(SCRIPT_TIMEOUT_MS);
|
||||
|
||||
_scriptRequestTimeout = new QTimer;
|
||||
connect(_scriptRequestTimeout, &QTimer::timeout, this, &Agent::scriptRequestFinished);
|
||||
_scriptRequestTimeout->start(SCRIPT_TIMEOUT_MS);
|
||||
|
||||
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());
|
||||
|
||||
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() {
|
||||
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) {
|
||||
_scriptContents = request->getData();
|
||||
|
|
|
@ -69,6 +69,8 @@ private slots:
|
|||
|
||||
void processAgentAvatarAndAudio(float deltaTime);
|
||||
|
||||
void nodeActivated(SharedNodePointer activatedNode);
|
||||
|
||||
private:
|
||||
std::unique_ptr<ScriptEngine> _scriptEngine;
|
||||
EntityEditPacketSender _entityEditSender;
|
||||
|
@ -83,7 +85,8 @@ private:
|
|||
void sendAvatarBillboardPacket();
|
||||
|
||||
QString _scriptContents;
|
||||
QTimer _scriptRequestTimeout;
|
||||
QTimer* _scriptRequestTimeout { nullptr };
|
||||
ResourceRequest* _pendingScriptRequest { nullptr };
|
||||
bool _isListeningToAudioStream = false;
|
||||
SharedSoundPointer _avatarSound;
|
||||
int _numAvatarSoundSentBytes = 0;
|
||||
|
|
Loading…
Reference in a new issue