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);
});
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 {
@ -2181,7 +2194,7 @@ void ScriptEngine::loadEntityScript(const EntityItemID& entityID, const QString&
qCDebug(scriptengine) << "loadEntityScript.contentAvailable" << status << QUrl(url).fileName() << entityID.toString();
#endif
if (!isStopping() && _entityScripts.contains(entityID)) {
entityScriptContentAvailable(entityID, url, contents, isURL, success, status);
_contentAvailableQueue[entityID] = { entityID, url, contents, isURL, success, status };
} else {
#ifdef DEBUG_ENTITY_STATES
qCDebug(scriptengine) << "loadEntityScript.contentAvailable -- aborting";

View file

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