11 #include "interfaces/generic/ScriptInvocationManager.h" 12 #include "interfaces/generic/ScriptRunner.h" 13 #include "threads/CriticalSection.h" 14 #include "threads/Event.h" 20 template<
class TScript>
24 using HandleType = int;
29 using CScriptRunner::ExecuteScript;
30 using CScriptRunner::GetAddon;
31 using CScriptRunner::SetDone;
32 using CScriptRunner::StartScript;
34 bool RunScript(TScript* script,
35 const ADDON::AddonPtr& addon,
36 const std::string& path,
39 if (script ==
nullptr || addon ==
nullptr || path.empty())
45 handle = GetNewScriptHandle(script);
47 ReuseScriptHandle(handle, script);
50 auto result = CScriptRunner::RunScript(addon, path, handle, resume);
53 RemoveScriptHandle(handle);
58 static HandleType GetNewScriptHandle(TScript* script)
60 std::unique_lock<CCriticalSection> lock(s_critical);
61 uint32_t handle = ++s_scriptHandleCounter;
62 s_scriptHandles[handle] = script;
67 static void ReuseScriptHandle(HandleType handle, TScript* script)
69 std::unique_lock<CCriticalSection> lock(s_critical);
70 s_scriptHandles[handle] = script;
73 static void RemoveScriptHandle(HandleType handle)
75 std::unique_lock<CCriticalSection> lock(s_critical);
76 s_scriptHandles.erase(handle);
79 static TScript* GetScriptFromHandle(HandleType handle)
81 std::unique_lock<CCriticalSection> lock(s_critical);
82 auto scriptHandle = s_scriptHandles.find(handle);
83 if (scriptHandle == s_scriptHandles.end())
86 return scriptHandle->second;
89 static inline CCriticalSection& GetScriptsLock() {
return s_critical; }
92 static std::map<HandleType, TScript*> s_scriptHandles;
93 static CCriticalSection s_critical;
94 static HandleType s_scriptHandleCounter;
97 template<
class TScript>
98 std::map<typename CRunningScriptsHandler<TScript>::HandleType, TScript*>
100 template<
class TScript>
102 template<
class TScript>
103 typename CRunningScriptsHandler<TScript>::HandleType
int GetReusablePluginHandle(const std::string &script)
Returns addon_handle if last reusable invoker is ready to use.
Definition: ScriptInvocationManager.cpp:178
Definition: RunningScriptsHandler.h:21
Definition: ScriptRunner.h:16