X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fscript%2Fcpp_api%2Fs_async.h;h=dbe0654e280282949b517d66777ef6f102338596;hb=772944daf69ab463568fbbf35a9011e4c8e6c44a;hp=7f8c72faedd331a866ec1b1c00e266daf6d40122;hpb=e4bff8be94c0db4f94e63ad448d0eeb869ccdbbd;p=dragonfireclient.git diff --git a/src/script/cpp_api/s_async.h b/src/script/cpp_api/s_async.h index 7f8c72fae..dbe0654e2 100644 --- a/src/script/cpp_api/s_async.h +++ b/src/script/cpp_api/s_async.h @@ -38,7 +38,16 @@ class AsyncEngine; // Declarations // Data required to queue a job -struct LuaJobInfo { +struct LuaJobInfo +{ + LuaJobInfo() : + serializedFunction(""), + serializedParams(""), + serializedResult(""), + id(0), + valid(false) + {} + // Function to be called in async environment std::string serializedFunction; // Parameter to be passed to function @@ -66,16 +75,16 @@ class AsyncWorkerThread : public Thread, public ScriptApiBase { // Asynchornous thread and job management class AsyncEngine { friend class AsyncWorkerThread; + typedef void (*StateInitializer)(lua_State *L, int top); public: AsyncEngine(); ~AsyncEngine(); /** - * Register function to be used within engine - * @param name Function name to be used within Lua environment + * Register function to be called on new states * @param func C function to be called */ - bool registerFunction(const char* name, lua_CFunction func); + void registerStateInitializer(StateInitializer func); /** * Create async engine tasks and lock function registration @@ -89,15 +98,14 @@ class AsyncEngine { * @param params Serialized parameters * @return jobid The job is queued */ - unsigned int queueAsyncJob(std::string func, std::string params); + unsigned int queueAsyncJob(const std::string &func, const std::string ¶ms); /** * Engine step to process finished jobs * the engine step is one way to pass events back, PushFinishedJobs another * @param L The Lua stack - * @param errorhandler Stack index of the Lua error handler */ - void step(lua_State *L, int errorhandler); + void step(lua_State *L); /** * Push a list of finished jobs onto the stack @@ -117,7 +125,7 @@ class AsyncEngine { * Put a Job result back to result queue * @param result result of completed job */ - void putJobResult(LuaJobInfo result); + void putJobResult(const LuaJobInfo &result); /** * Initialize environment with current registred functions @@ -132,8 +140,8 @@ class AsyncEngine { // Variable locking the engine against further modification bool initDone; - // Internal store for registred functions - std::map functionList; + // Internal store for registred state initializers + std::vector stateInitializers; // Internal counter to create job IDs unsigned int jobIdCounter;