15 #ifndef hifi_ScriptManager_h
16 #define hifi_ScriptManager_h
22 #include <unordered_map>
25 #include <QtCore/QFuture>
26 #include <QtCore/QHash>
27 #include <QtCore/QObject>
28 #include <QtCore/QReadWriteLock>
29 #include <QtCore/QSet>
30 #include <QtCore/QSharedPointer>
31 #include <QtCore/QString>
32 #include <QtCore/QTimer>
33 #include <QtCore/QUrl>
34 #include <QtCore/QVariant>
36 #include "EntityItemID.h"
37 #include "EntitiesScriptEngineProvider.h"
38 #include "EntityScriptUtils.h"
39 #include <ExternalResource.h>
40 #include <SettingHandle.h>
42 #include "AssetScriptingInterface.h"
43 #include "ConsoleScriptingInterface.h"
45 #include "PointerEvent.h"
47 #include "ScriptUUID.h"
48 #include "ScriptValue.h"
49 #include "ScriptException.h"
52 static const QString NO_SCRIPT(
"");
54 static const int SCRIPT_FPS = 60;
55 static const int DEFAULT_MAX_ENTITY_PPS = 9000;
56 static const int DEFAULT_ENTITY_PPS_PER_SCRIPT = 900;
61 class ScriptManagerScriptingInterface;
63 using ScriptEnginePointer = std::shared_ptr<ScriptEngine>;
64 using ScriptManagerPointer = std::shared_ptr<ScriptManager>;
65 using ScriptManagerScriptingInterfacePointer = std::shared_ptr<ScriptManagerScriptingInterface>;
66 using ScriptValueList = QList<ScriptValue>;
68 Q_DECLARE_METATYPE(ScriptManagerPointer)
70 const int QTREGISTER_QTimerStar = qRegisterMetaType<QTimer*>();
107 QString entityScript;
153 typedef std::unordered_map<EntityItemID, EntityScriptContentAvailable> EntityScriptContentAvailableMap;
155 typedef QList<CallbackData> CallbackList;
156 typedef QHash<QString, CallbackList> RegisteredEventHandlers;
170 EntityScriptStatus
status { EntityScriptStatus::PENDING };
210 #define STATIC_SCRIPT_TYPES_INITIALIZER(init) \
211 static ScriptManager::StaticTypesInitializerNode static_script_types_initializer_(init);
213 #define STATIC_SCRIPT_INITIALIZER(init) \
214 static ScriptManager::StaticInitializerNode static_script_initializer_(init);
281 class ScriptManager :
public QObject,
public EntitiesScriptEngineProvider,
public std::enable_shared_from_this<ScriptManager> {
285 Q_PROPERTY(QString fileName MEMBER _fileNameString CONSTANT)
287 static const QString SCRIPT_EXCEPTION_FORMAT;
288 static const QString SCRIPT_BACKTRACE_SEP;
383 static int processLevelMaxRetries;
384 ScriptManager(
Context context,
const QString& scriptContents = NO_SCRIPT,
const QString& fileNameString = QString(
"about:ScriptEngine"));
389 class StaticInitializerNode {
391 ScriptManagerInitializer
init;
392 StaticInitializerNode* prev;
393 inline StaticInitializerNode(ScriptManagerInitializer&& pInit) :
init(std::move(pInit)),prev(nullptr) { registerNewStaticInitializer(
this); }
395 static void registerNewStaticInitializer(StaticInitializerNode* dest);
397 class StaticTypesInitializerNode {
399 ScriptManagerInitializer
init;
400 StaticTypesInitializerNode* prev;
401 inline StaticTypesInitializerNode(ScriptManagerInitializer&& pInit) :
init(std::move(pInit)),prev(nullptr) { registerNewStaticTypesInitializer(
this); }
403 static void registerNewStaticTypesInitializer(StaticTypesInitializerNode* dest);
445 inline ScriptEnginePointer
engine() {
return _engine; }
447 QList<EntityItemID> getListOfEntityScriptIDs();
476 Q_INVOKABLE
void stop(
bool marshal =
false);
514 void loadURL(
const QUrl& scriptURL,
bool reload);
632 Q_INVOKABLE
void load(
const QString& loadfile);
736 QVariantMap
fetchModuleSource(
const QString& modulePath,
const bool forceDownload =
false);
819 Q_INVOKABLE
void print(
const QString& message);
827 Q_INVOKABLE QUrl
resolvePath(
const QString& path)
const;
871 QReadLocker locker { &_entityScriptsLock };
872 auto it = _entityScripts.constFind(entityID);
873 return it != _entityScripts.constEnd() && it->status == EntityScriptStatus::RUNNING;
943 const QStringList& params = QStringList(),
944 const QUuid& remoteCallerID = QUuid())
override;
1087 void scriptErrorMessage(
const QString& message,
const QString& fileName,
int lineNumber);
1109 void scriptInfoMessage(
const QString& message,
const QString& fileName,
int lineNumber);
1168 void setScriptEngines(QSharedPointer<ScriptEngines>& scriptEngines) { _scriptEngines = scriptEngines; }
1207 Q_INVOKABLE QString
getExternalPath(ExternalResource::Bucket bucket,
const QString& path);
1301 void finished(
const QString& fileNameString, ScriptManagerPointer);
1468 void initMetaTypes();
1484 Q_INVOKABLE
void executeOnScriptThread(std::function<
void()>
function,
const Qt::ConnectionType& type = Qt::QueuedConnection );
1497 Q_INVOKABLE QString
_requireResolve(
const QString& moduleId,
const QString& relativeTo = QString());
1510 void stopAllTimers();
1511 void stopAllTimersForEntityScript(
const EntityItemID& entityID);
1560 QHash<EntityItemID, RegisteredEventHandlers> _registeredHandlers;
1576 QUrl currentSandboxURL;
1614 ScriptEnginePointer _engine;
1615 QString _scriptContents;
1617 std::atomic<bool> _isFinished {
false };
1618 std::atomic<bool> _isRunning {
false };
1619 std::atomic<bool> _isStopping {
false };
1620 std::atomic<bool> _isDoneRunning {
false };
1621 bool _areMetaTypesInitialized {
false };
1622 bool _isInitialized {
false };
1623 QHash<QTimer*, CallbackData> _timerFunctionMap;
1624 QSet<QUrl> _includedURLs;
1625 mutable QReadWriteLock _entityScriptsLock { QReadWriteLock::Recursive };
1626 QHash<EntityItemID, EntityScriptDetails> _entityScripts;
1627 EntityScriptContentAvailableMap _contentAvailableQueue;
1630 bool _isThreaded {
false };
1633 QString _fileNameString;
1638 ConsoleScriptingInterface _consoleScriptingInterface;
1639 std::atomic<bool> _isUserLoaded {
false };
1640 bool _isReloading {
false };
1642 std::atomic<bool> _quitWhenFinished;
1644 AssetScriptingInterface* _assetScriptingInterface;
1646 std::function<bool()> _emitScriptUpdates{ []() {
return true; } };
1648 std::recursive_mutex _lock;
1650 std::chrono::microseconds _totalTimerExecution { 0 };
1652 static const QString _SETTINGS_ENABLE_EXTENDED_EXCEPTIONS;
1656 QWeakPointer<ScriptEngines> _scriptEngines;
1661 int _timerCallCounter{ 0 };
1662 double _totalTimeInTimerEvents_s{ 0.0 };
1664 ScriptManagerScriptingInterfacePointer _scriptingInterface;
1666 bool _abortOnUncaughtException{
false };
1668 friend ScriptManagerPointer
newScriptManager(
Context context,
const QString& scriptContents,
const QString& fileNameString);
1669 friend class ScriptManagerScriptingInterface;
1682 const QString& scriptContents,
1683 const QString& fileNameString);
1697 const QString& scriptContents,
1698 const QString& fileNameString);
Callback data for addEventHandler.
Definition: ScriptManager.h:77
QUrl definingSandboxURL
Sandbox URL for the script.
Definition: ScriptManager.h:95
EntityItemID definingEntityIdentifier
Entity ID.
Definition: ScriptManager.h:89
DeferredLoadEntity.
Definition: ScriptManager.h:104
Abstract ID for editing model items. Used in EntityItem JS API.
Definition: EntityItemID.h:28
Details about an entity script.
Definition: ScriptManager.h:163
QUrl definingSandboxURL
URL under which the script is allowed to have access.
Definition: ScriptManager.h:206
int64_t lastModified
Last modified time of the underlying script file.
Definition: ScriptManager.h:198
ScriptValue scriptObject
The return value of the script.
Definition: ScriptManager.h:191
QString errorInfo
Error information.
Definition: ScriptManager.h:178
QString scriptText
The source code of the script.
Definition: ScriptManager.h:185
EntityScriptStatus status
Current status.
Definition: ScriptManager.h:170
Provides the Mat4 scripting interface.
Definition: Mat4.h:44
Represents a 2D or 3D pointer to the scripting engine. Exposed as PointerEvent
Definition: PointerEvent.h:30
Provides the Quat scripting interface.
Definition: Quat.h:61
Provides an engine-independent interface for a scripting engine.
Definition: ScriptEngine.h:93
Provides the ScriptDiscoveryService scripting interface.
Definition: ScriptEngines.h:59
Manages a single scripting engine.
Definition: ScriptManager.h:281
Type
Type of the script.
Definition: ScriptManager.h:338
@ NETWORKLESS_TEST
Test system script.
Definition: ScriptManager.h:379
@ AVATAR
Avatar script.
Definition: ScriptManager.h:368
@ AGENT
Agent script.
Definition: ScriptManager.h:362
@ ENTITY_SERVER
Entity server Receives the update event.
Definition: ScriptManager.h:356
@ CLIENT
Client.
Definition: ScriptManager.h:343
@ ENTITY_CLIENT
Entity client Receives the update event.
Definition: ScriptManager.h:349
Q_INVOKABLE void executeOnScriptThread(std::function< void()> function, const Qt::ConnectionType &type=Qt::QueuedConnection)
executeOnScriptThread
Definition: ScriptManager.cpp:427
void doWithEnvironment(const EntityItemID &entityID, const QUrl &sandboxURL, std::function< void()> operation)
Execute operation in the appropriate context for (the possibly empty) entityID. Even if entityID is s...
Definition: ScriptManager.cpp:2543
void setUserLoaded(bool isUserLoaded)
Set whether this script was user-loaded.
Definition: ScriptManager.h:1036
void disconnectNonEssentialSignals()
Disconnect all signals, except essential ones.
Definition: ScriptManager.cpp:386
Q_INVOKABLE bool isEntityScriptRunning(const EntityItemID &entityID)
Checks whether an entity has an entity script running.
Definition: ScriptManager.h:870
void setScriptEngines(QSharedPointer< ScriptEngines > &scriptEngines)
Set a shared pointer to the ScriptEngines class.
Definition: ScriptManager.h:1168
Q_INVOKABLE void clearTimeout(QTimer *timer)
Stops a timeout timer.
Definition: ScriptManager.h:802
Q_INVOKABLE void registerValue(const QString &valueName, ScriptValue value)
Registers a global object by name.
Definition: ScriptManager.cpp:832
Q_INVOKABLE void loadEntityScript(const EntityItemID &entityID, const QString &entityScript, bool forceRedownload)
Load an entity script.
Definition: ScriptManager.cpp:1994
Q_INVOKABLE void removeEventHandler(const EntityItemID &entityID, const QString &eventName, const ScriptValue &handler)
Removes a function from the list of functions called when an entity event occurs on a particular enti...
Definition: ScriptManager.cpp:837
Q_INVOKABLE QTimer * setInterval(const ScriptValue &function, int intervalMS)
Calls a function repeatedly, at a set interval.
Definition: ScriptManager.cpp:1233
Q_INVOKABLE void requestGarbageCollection()
Manually runs the JavaScript garbage collector which reclaims memory by disposing of objects that are...
Definition: ScriptManager.cpp:2757
Q_INVOKABLE void print(const QString &message)
Prints a message to the program log.
Definition: ScriptManager.cpp:1323
void scriptLoaded(const QString &scriptFilename)
Script.scriptLoaded.
Q_INVOKABLE void endProfileRange(const QString &label) const
Finishes timing a section of code in order to send usage data about it to Overte. Shouldn't be used o...
Definition: ScriptManager.cpp:1332
Q_INVOKABLE QUrl resourcesPath() const
Gets the path to the resources directory for QML files.
Definition: ScriptManager.cpp:1319
Q_INVOKABLE void stop(bool marshal=false)
Stops and unloads the current script.
Definition: ScriptManager.cpp:1148
void setEntityScriptDetails(const EntityItemID &entityID, const EntityScriptDetails &details)
Set the details for an entity script.
Definition: ScriptManager.cpp:1915
void attachDefaultEventHandlers()
Triggered once before the first call to Script.addEventHandler happens on this ScriptManager connecti...
bool isDoneRunning()
Returns true after script finished running and doneRunning signal was called.
Definition: ScriptManager.h:1240
void scriptPrintedMessage(const QString &message, const QString &fileName, int lineNumber)
Logs a script printed message and emits an printedMessage event.
Definition: ScriptManager.cpp:611
void entityScriptPreloadFinished(const EntityItemID &entityID)
Emitted when an entity script has finished running preload.
void clearDebugLogWindow()
Clears the debug log window.
Definition: ScriptManager.cpp:619
std::shared_ptr< ScriptException > getUncaughtException() const
Get the uncaught exception from the underlying script engine.
Definition: ScriptManager.cpp:237
void updateMemoryCost(const qint64 &deltaSize)
Script.updateMemoryCost.
Definition: ScriptManager.cpp:1162
void clearDebugWindow()
Script.clearDebugWindow.
void forwardHandlerCall(const EntityItemID &entityID, const QString &eventName, const ScriptValueList &eventHanderArgs)
Call all the registered event handlers on an entity for the specified name.
Definition: ScriptManager.cpp:1879
Q_INVOKABLE void load(const QString &loadfile)
Starts running another script in Interface, if it isn't already running. The script is not automatica...
Definition: ScriptManager.cpp:1846
Type getType()
Returns the script type.
Definition: ScriptManager.h:979
void scriptErrorMessage(const QString &message, const QString &fileName, int lineNumber)
Logs a script error message and emits an errorMessage event.
Definition: ScriptManager.cpp:587
QVariant cloneEntityScriptDetails(const EntityItemID &entityID)
Clone the details of an entity script.
Definition: ScriptManager.cpp:1933
bool hasValidScriptSuffix(const QString &scriptFileName)
Determines whether a script filename has the right suffix.
Definition: ScriptManager.cpp:549
void entityScriptDetailsUpdated()
Emitted when an entity script is added or removed, or when the status of an entity script is updated ...
void setAbortOnUncaughtException(bool value)
Whether to abort on an uncaught exception.
Definition: ScriptManager.h:1232
void errorEntityMessage(const QString &message, const QString &fileName, int lineNumber, const EntityItemID &entityID, bool isServerScript)
Triggered when a client side entity script generates an error.
void loadScript(const QString &scriptName, bool isUserLoaded)
Script.loadScript.
bool isStopping() const
Whether this ScriptManager is stopping. Once this is true, it stays true.
Definition: ScriptManager.h:1012
QString logException(const ScriptValue &exception)
Log an exception.
Definition: ScriptManager.cpp:226
Q_INVOKABLE bool isAgentScript() const
Checks whether the script is running as an assignment client script.
Definition: ScriptManager.h:577
Q_INVOKABLE void addEventHandler(const EntityItemID &entityID, const QString &eventName, const ScriptValue &handler)
Adds a function to the list of functions called when a particular event occurs on a particular entity...
Definition: ScriptManager.cpp:883
QTimer * setupTimerWithInterval(const ScriptValue &function, int intervalMS, bool isSingleShot)
Creates a timer with the specified interval.
Definition: ScriptManager.cpp:1209
void updateEntityScriptStatus(const EntityItemID &entityID, const EntityScriptStatus &status, const QString &errorInfo=QString())
Updates the status of an entity script.
Definition: ScriptManager.cpp:1923
void printedEntityMessage(const QString &message, const QString &fileName, int lineNumber, const EntityItemID &entityID, bool isServerScript)
Triggered when a client side entity script prints a message to the program log.
Q_INVOKABLE void entityScriptContentAvailable(const EntityItemID &entityID, const QString &scriptOrURL, const QString &contents, bool isURL, bool success, const QString &status)
Script.entityScriptContentAvailable.
Definition: ScriptManager.cpp:2068
Q_INVOKABLE ScriptValue require(const QString &moduleId)
Provides access to methods or objects provided in an external JavaScript or JSON file.
Definition: ScriptManager.cpp:1583
ScriptValue instantiateModule(const ScriptValue &module, const QString &sourceCode)
Evaluate a pending module object using the fetched source code.
Definition: ScriptManager.cpp:1558
ScriptEnginePointer engine()
Underlying scripting engine.
Definition: ScriptManager.h:445
void errorMessage(const QString &message, const QString &scriptName)
Triggered when the script generates an error.
void printedMessage(const QString &message, const QString &scriptName)
Triggered when the script prints a message to the program log.
void callWithEnvironment(const EntityItemID &entityID, const QUrl &sandboxURL, const ScriptValue &function, const ScriptValue &thisObject, const ScriptValueList &args)
Execute operation in the appropriate context for (the possibly empty) entityID.
Definition: ScriptManager.cpp:2561
QFuture< QVariant > getLocalEntityScriptDetails(const EntityItemID &entityID) override
Get the details of a local entity script.
Definition: ScriptManager.cpp:1975
Q_INVOKABLE QUrl resolvePath(const QString &path) const
Resolves a relative path to an absolute path. The relative path is relative to the script's location.
Definition: ScriptManager.cpp:1275
bool getAbortOnUncaughtException() const
Whether this engine will abort on an uncaught exception.
Definition: ScriptManager.h:1224
bool hasEntityScriptDetails(const EntityItemID &entityID) const
Whether there are script details for a given entity ID.
Definition: ScriptManager.cpp:1989
void infoEntityMessage(const QString &message, const QString &fileName, int lineNumber, const EntityItemID &entityID, bool isServerScript)
Triggered when a client side entity script generates an information message.
Q_INVOKABLE void clearInterval(QTimer *timer)
Stops an interval timer.
Definition: ScriptManager.h:786
Q_INVOKABLE void include(const QStringList &includeFiles, const ScriptValue &callback=ScriptValue())
Includes JavaScript from other files in the current script.
Definition: ScriptManager.cpp:1689
void scriptWarningMessage(const QString &message, const QString &fileName, int lineNumber)
Logs a script warning message and emits an warningMessage event.
Definition: ScriptManager.cpp:595
Q_INVOKABLE QString _requireResolve(const QString &moduleId, const QString &relativeTo=QString())
Script._requireResolve.
Definition: ScriptManager.cpp:1337
void removeAllEventHandlers(const EntityItemID &entityID)
Remove all event handlers for the specified entityID (i.e. the entity is being removed)
Definition: ScriptManager.cpp:868
QString getFilename() const
Get the filename of the running script, without the path.
Definition: ScriptManager.cpp:536
void infoMessage(const QString &message, const QString &scriptName)
Triggered when the script generates an information message.
Q_INVOKABLE void unloadAllEntityScripts(bool blockingCall=false)
Unload all entity scripts.
Definition: ScriptManager.cpp:2474
int getNumRunningEntityScripts() const
Get the number of running entity scripts.
Definition: ScriptManager.cpp:1904
Q_INVOKABLE void resetModuleCache(bool deleteScriptCache=false)
Resets the module cache.
Definition: ScriptManager.cpp:690
QString getAbsoluteFilename() const
Get the filename of the running script, with absolute path.
Definition: ScriptManager.cpp:545
ScriptValue evaluate(const QString &program, const QString &fileName=QString())
Evaluate a program in the underlying scripting engine.
Definition: ScriptManager.cpp:2753
bool isQuitWhenFinished() const
Whether to quit when finished.
Definition: ScriptManager.h:1066
void warningEntityMessage(const QString &message, const QString &fileName, int lineNumber, const EntityItemID &entityID, bool isServerScript)
Triggered when a client side entity script generates a warning.
Q_INVOKABLE void beginProfileRange(const QString &label) const
Starts timing a section of code in order to send usage data about it to Overte. Shouldn't be used out...
Definition: ScriptManager.cpp:1328
Q_INVOKABLE bool isEntityClientScript() const
Checks whether the script is running as a client entity script.
Definition: ScriptManager.h:562
Q_INVOKABLE void unloadEntityScript(const EntityItemID &entityID, bool shouldRemoveFromMap=false)
Unload an entity script.
Definition: ScriptManager.cpp:2420
void errorLoadingScript(const QString &scriptFilename)
Script.errorLoadingScript.
void setEmitScriptUpdatesFunction(std::function< bool()> func)
Set a function that determines whether to emit update events.
Definition: ScriptManager.h:1076
void removeFromScriptEngines()
Removes shared pointer to script engine from the list of all script engines.
Definition: ScriptManager.cpp:531
Q_INVOKABLE QString getContext() const
Gets the context that the script is running in: Interface/avatar, client entity, server entity,...
Definition: ScriptManager.cpp:353
Q_INVOKABLE bool isDebugMode() const
Checks whether the application was compiled as a debug build.
Definition: ScriptManager.cpp:371
bool registerModuleWithParent(const ScriptValue &module, const ScriptValue &parent)
Replaces or adds "module" to "parent.children[]" array.
Definition: ScriptManager.cpp:1448
void run()
Run the script in the caller's thread, exit when Script.stop() is called.
Definition: ScriptManager.cpp:921
Q_INVOKABLE void logBacktrace(const QString &title)
Prints out current backtrace to the log.
Definition: ScriptManager.cpp:2761
void runInThread()
Run the script in a dedicated thread.
Definition: ScriptManager.cpp:396
bool isFinished() const
Whether the script has finished running.
Definition: ScriptManager.h:995
void doneRunning()
Triggered when the script has stopped.
Q_INVOKABLE QTimer * setTimeout(const ScriptValue &function, int timeoutMS)
Calls a function once, after a delay.
Definition: ScriptManager.cpp:1249
Q_INVOKABLE QString getExternalPath(ExternalResource::Bucket bucket, const QString &path)
Gets the URL for an asset in an external resource bucket.
Definition: ScriptManager.cpp:2717
Q_INVOKABLE void clearTimeout(QVariantMap timer)
Stops a timeout timer Overloaded version is needed in case the timer has expired.
Definition: ScriptManager.h:811
ScriptValue getReturnValue() const
Return value of the script that finished running.
Definition: ScriptManager.h:1197
void scriptEnding()
Triggered when the script is stopping.
bool isRunning() const
Whether the script is running.
Definition: ScriptManager.h:1003
bool isUserLoaded() const
Whether the script was user-loaded.
Definition: ScriptManager.h:1047
void stopTimer(QTimer *timer)
Stops a timer.
Definition: ScriptManager.cpp:1265
void unhandledException(std::shared_ptr< ScriptException > exception)
Triggered when a script generates an unhandled exception.
void setQuitWhenFinished(const bool quitWhenFinished)
Set whether to quit when finished.
Definition: ScriptManager.h:1056
void releaseEntityPacketSenderMessages(bool wait)
Triggered repeatedly in the scripting loop to ensure entity edit messages get processed properly conn...
void init()
Initializes the underlying scripting engine.
Definition: ScriptManager.cpp:732
void finished(const QString &fileNameString, ScriptManagerPointer)
Script.finished.
void loadURL(const QUrl &scriptURL, bool reload)
Load a script from a given URL.
Definition: ScriptManager.cpp:555
void reloadScript(const QString &scriptName, bool isUserLoaded)
Script.reloadScript.
Context
Context of the script.
Definition: ScriptManager.h:294
@ ENTITY_CLIENT_SCRIPT
Entity client script.
Definition: ScriptManager.h:306
@ ENTITY_SERVER_SCRIPT
Entity server script.
Definition: ScriptManager.h:312
@ NETWORKLESS_TEST_SCRIPT
Network-less test system context. This is used for the QTest self-tests, and minimizes the API that i...
Definition: ScriptManager.h:331
@ CLIENT_SCRIPT
Client script. Allowed to access local HTML files on UI created from C++ calls.
Definition: ScriptManager.h:300
@ AGENT_SCRIPT
Agent script.
Definition: ScriptManager.h:318
friend ScriptManagerPointer newScriptManager(Context context, const QString &scriptContents, const QString &fileNameString)
Creates a new ScriptManager.
Definition: ScriptManager.cpp:251
void update(float deltaTime)
Triggered frequently at a system-determined interval.
Q_INVOKABLE QString formatException(const ScriptValue &exception, bool includeExtendedDetails)
Format an exception and return it as a string.
Definition: ScriptManager.cpp:2721
void setParentURL(const QString &parentURL)
Set the parent URL, used to resolve relative paths.
Definition: ScriptManager.h:1541
ScriptValue currentModule()
The current parent module from the running JS script.
Definition: ScriptManager.cpp:1427
Q_INVOKABLE void callEntityScriptMethod(const EntityItemID &entityID, const QString &methodName, const QStringList ¶ms=QStringList(), const QUuid &remoteCallerID=QUuid()) override
Call a method on an entity script.
Definition: ScriptManager.cpp:2568
void setType(Type type)
Set the script type.
Definition: ScriptManager.h:972
Q_INVOKABLE bool isEntityServerScript() const
Checks whether the script is running as a server entity script.
Definition: ScriptManager.h:570
void runningStateChanged()
Triggered when the running state of the script changes, e.g., from running to stopping.
QString getTypeAsString() const
Returns the type of the script as a string.
Definition: ScriptManager.cpp:348
bool isStopped() const
Whether the ScriptManager is stopped and unable to run scripts.
Definition: ScriptManager.cpp:912
void warningMessage(const QString &message, const QString &scriptName)
Triggered when the script generates a warning.
void waitTillDoneRunning(bool shutdown=false)
Stop any evaluating scripts and wait for the scripting thread to finish.
Definition: ScriptManager.cpp:436
bool getEntityScriptDetails(const EntityItemID &entityID, EntityScriptDetails &details) const
Retrieves the details about an entity script.
Definition: ScriptManager.cpp:1979
QVariantMap fetchModuleSource(const QString &modulePath, const bool forceDownload=false)
Synchronously fetch a module's source code.
Definition: ScriptManager.cpp:1500
Q_INVOKABLE bool isClientScript() const
Checks whether the script is running as an Interface or avatar script.
Definition: ScriptManager.h:548
ScriptValue newModule(const QString &modulePath, const ScriptValue &parent=ScriptValue())
creates a new JS "module" Object with default metadata properties
Definition: ScriptManager.cpp:1470
void scriptInfoMessage(const QString &message, const QString &fileName, int lineNumber)
Logs a script info message and emits an infoMessage event.
Definition: ScriptManager.cpp:603
Q_INVOKABLE void clearInterval(QVariantMap timer)
Stops an interval timer.
Definition: ScriptManager.h:795
Provides the Uuid scripting interface.
Definition: ScriptUUID.h:42
[ScriptInterface] Provides an engine-independent interface for QScriptValue
Definition: ScriptValue.h:40
Provides the Vec3 scripting interface.
Definition: Vec3.h:80
Entity with available script contents.
Definition: ScriptManager.h:115
bool isURL
Whether scriptOrURL contains an URL.
Definition: ScriptManager.h:138
EntityItemID entityID
Entity ID.
Definition: ScriptManager.h:120
QString status
Status as text.
Definition: ScriptManager.h:150
QString scriptOrURL
URL to the script, or the actual script if embedded in the URL field.
Definition: ScriptManager.h:126
QString contents
Contents of the script.
Definition: ScriptManager.h:132
bool success
Whether the request has been successful.
Definition: ScriptManager.h:144