fix require by queueing content requests

This commit is contained in:
Thijs Wenker 2018-07-28 00:25:16 +02:00
parent db8846796f
commit ba8d445444
2 changed files with 24 additions and 1 deletions

View file

@ -219,6 +219,19 @@ ScriptEngine::ScriptEngine(Context context, const QString& scriptContents, const
} }
logException(output); logException(output);
}); });
if (_type == Type::ENTITY_CLIENT || _type == Type::ENTITY_SERVER) {
QObject::connect(this, &ScriptEngine::update, this, [this]() {
// process pending entity script content
if (_contentAvailableQueue.size()) {
auto pending = _contentAvailableQueue.values().toStdList();
_contentAvailableQueue.clear();
for (auto& args : pending) {
entityScriptContentAvailable(args.entityID, args.scriptOrURL, args.contents, args.isURL, args.success, args.status);
}
}
});
}
} }
QString ScriptEngine::getContext() const { QString ScriptEngine::getContext() const {
@ -2181,7 +2194,7 @@ void ScriptEngine::loadEntityScript(const EntityItemID& entityID, const QString&
qCDebug(scriptengine) << "loadEntityScript.contentAvailable" << status << QUrl(url).fileName() << entityID.toString(); qCDebug(scriptengine) << "loadEntityScript.contentAvailable" << status << QUrl(url).fileName() << entityID.toString();
#endif #endif
if (!isStopping() && _entityScripts.contains(entityID)) { if (!isStopping() && _entityScripts.contains(entityID)) {
entityScriptContentAvailable(entityID, url, contents, isURL, success, status); _contentAvailableQueue[entityID] = { entityID, url, contents, isURL, success, status };
} else { } else {
#ifdef DEBUG_ENTITY_STATES #ifdef DEBUG_ENTITY_STATES
qCDebug(scriptengine) << "loadEntityScript.contentAvailable -- aborting"; qCDebug(scriptengine) << "loadEntityScript.contentAvailable -- aborting";

View file

@ -71,6 +71,15 @@ public:
//bool forceRedownload; //bool forceRedownload;
}; };
struct EntityScriptContentAvailable {
EntityItemID entityID;
QString scriptOrURL;
QString contents;
bool isURL;
bool success;
QString status;
};
typedef QList<CallbackData> CallbackList; typedef QList<CallbackData> CallbackList;
typedef QHash<QString, CallbackList> RegisteredEventHandlers; typedef QHash<QString, CallbackList> RegisteredEventHandlers;
@ -762,6 +771,7 @@ protected:
QHash<EntityItemID, EntityScriptDetails> _entityScripts; QHash<EntityItemID, EntityScriptDetails> _entityScripts;
QHash<QString, EntityItemID> _occupiedScriptURLs; QHash<QString, EntityItemID> _occupiedScriptURLs;
QList<DeferredLoadEntity> _deferredEntityLoads; QList<DeferredLoadEntity> _deferredEntityLoads;
QMap<EntityItemID, EntityScriptContentAvailable> _contentAvailableQueue;
bool _isThreaded { false }; bool _isThreaded { false };
QScriptEngineDebugger* _debugger { nullptr }; QScriptEngineDebugger* _debugger { nullptr };