9#include <unordered_set>
59 bool *write_allowed)
override;
94 const std::string &mod_origin =
"");
103 const std::string &mod_origin =
"");
109 void step(lua_State *L);
unsigned int autoscaleMaxWorkers
Definition s_async.h:157
~AsyncEngine()
Definition s_async.cpp:28
std::unordered_set< u32 > autoscaleSeenJobs
Definition s_async.h:159
u32 queueAsyncJob(std::string &&func, std::string &¶ms, const std::string &mod_origin="")
Queue an async job.
Definition s_async.cpp:94
u64 autoscaleTimer
Definition s_async.h:158
std::vector< AsyncWorkerThread * > workerThreads
Definition s_async.h:181
std::deque< LuaJobInfo > jobQueue
Definition s_async.h:173
void stepJobResults(lua_State *L)
Process finished jobs callbacks.
Definition s_async.cpp:161
Semaphore jobQueueCounter
Definition s_async.h:184
std::deque< LuaJobInfo > resultQueue
Definition s_async.h:178
AsyncEngine(Server *server)
Definition s_async.h:72
void registerStateInitializer(StateInitializer func)
Register function to be called on new states.
Definition s_async.cpp:59
void putJobResult(LuaJobInfo &&result)
Put a Job result back to result queue.
Definition s_async.cpp:147
void stepAutoscale()
Handle automatic scaling of worker threads.
Definition s_async.cpp:195
bool prepareEnvironment(lua_State *L, int top)
Initialize environment with current registred functions this function adds all functions registred by...
Definition s_async.cpp:230
bool getJob(LuaJobInfo *job)
Get a Job from queue to be processed this function blocks until a job is ready.
Definition s_async.cpp:129
void step(lua_State *L)
Engine step to process finished jobs.
Definition s_async.cpp:155
void(* StateInitializer)(lua_State *L, int top)
Definition s_async.h:69
std::vector< StateInitializer > stateInitializers
Definition s_async.h:165
u32 jobIdCounter
Definition s_async.h:168
void initialize(unsigned int numEngines)
Create async engine tasks and lock function registration.
Definition s_async.cpp:66
std::mutex jobQueueMutex
Definition s_async.h:171
bool initDone
Definition s_async.h:153
void addWorkerThread()
Start an additional worker thread.
Definition s_async.cpp:85
std::mutex resultQueueMutex
Definition s_async.h:176
bool isErrored
Definition s_async.h:63
virtual ~AsyncWorkerThread()
Definition s_async.cpp:295
bool checkPathInternal(const std::string &abs_path, bool write_required, bool *write_allowed) override
Should check if the given path may be accessed.
Definition s_async.cpp:300
AsyncWorkerThread(AsyncEngine *jobDispatcher, const std::string &name)
Definition s_async.cpp:263
void * run() override
Definition s_async.cpp:316
AsyncEngine * jobDispatcher
Definition s_async.h:62
Definition s_security.h:28
Definition semaphore.h:18
Definition activeobjectmgr.cpp:11
std::unique_ptr< PackedValue > params_ext
Definition s_async.h:35
std::string mod_origin
Definition s_async.h:41
std::string function
Definition s_async.h:31
std::string result
Definition s_async.h:37
std::string params
Definition s_async.h:33
std::unique_ptr< PackedValue > result_ext
Definition s_async.h:39
u32 id
Definition s_async.h:43
A packed value can be a primitive like a string or number but also a table including all of its conte...
Definition c_packer.h:72