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:179
Definition: RunningScriptsHandler.h:21
Definition: ScriptRunner.h:16