diff options
| author | niubinghui <[email protected]> | 2024-08-06 16:16:34 +0800 |
|---|---|---|
| committer | niubinghui <[email protected]> | 2024-08-06 16:16:34 +0800 |
| commit | 0f5cbff9740d2526a0b1e18901b709acdfc360af (patch) | |
| tree | 5fc543d02a8eb21795654612e4c0487578ecfc71 /src/lua_plugin_manage_internal.h | |
| parent | dc63983f77361ba94e5bdb4093019c0afda9961c (diff) | |
【新增】实现数据管理能力
Diffstat (limited to 'src/lua_plugin_manage_internal.h')
| -rw-r--r-- | src/lua_plugin_manage_internal.h | 103 |
1 files changed, 81 insertions, 22 deletions
diff --git a/src/lua_plugin_manage_internal.h b/src/lua_plugin_manage_internal.h index ea98f08..ad10ee2 100644 --- a/src/lua_plugin_manage_internal.h +++ b/src/lua_plugin_manage_internal.h @@ -47,6 +47,23 @@ * int thread_state_instance_load; * int lua_plugin_manage_config_load; * int lua_plugin_manage_thread_load; + * + * 08-06 + * 完成数据相关操作, 并补全函数script_execute + * 完成注册至C插件管理器中的session_ctx_new_func及session_ctx_free_func函数 + * 1. 声明并定义结构 + * struct lua_cdata; + * struct lua_context; + * 2. 声明函数 + * int lua_cdata_push_stack; + * int lua_cdata_pop_stack; + * void lua_cdata_destory; + * struct lua_context * lua_context_new; + * int lua_context_push_stack; + * void lua_context_free; + * + * void *lpm_ctx_new_func; + * void lpm_ctx_free_func; ************************************************************************/ #ifndef LUA_PLUGIN_MANAGE_INTERNAL_H #define LUA_PLUGIN_MANAGE_INTERNAL_H @@ -62,7 +79,7 @@ #include <time.h> /* ***** ***** ***** ***** ***** ***** */ - +/* 此部分主要功能为C向lua中注册函数及数据, 实现在lua_plugin_binding.c中 */ /* 需要注册至lua中的函数 */ struct lua_binding_function { @@ -88,6 +105,8 @@ int lua_cbinding_function_remove(lua_State *state, const char *function_name, co enum DATATYPE { DATATYPE_BEGIN = 0, + /* nil类型 */ + DATATYPE_NIL, /* bool类型 */ DATATYPE_BOOL, /* int类型 */ @@ -101,6 +120,7 @@ enum DATATYPE DATATYPE_TABLE, /* 指针类型 */ DATATYPE_POINTER, + DATATYPE_CONTEXT, DATATYPE_END }; @@ -132,11 +152,48 @@ int lua_cbinding_functions(lua_State *state); int lua_cbinding_datas(lua_State *state); /* ***** ***** ***** ***** ***** ***** */ +/* 此部分主要用于lua与C之间的数据转换与传递, 实现在lua_plugin_data.c中 */ +struct lua_cdata; +// struct lua_ctable; +struct lua_context; + +/* 保存lua数据的结构 */ +struct lua_cdata { + enum DATATYPE cdata_type; + union { + int cdata_bool; + int cdata_int; + double cdata_num; + char * cdata_string; + /* table暂时只有plugin_env场景下使用, 暂时使用索引进行操作 */ + int cdata_table; + void * cdata_pointer; + struct lua_context * cdata_context; + }; +}; +/* 将一个data结构入栈 */ +int lua_cdata_push_stack(lua_State * state, struct lua_cdata * cdata); +/* 从栈中弹出一个元素, 并保存在data结构中 */ +int lua_cdata_pop_stack(lua_State * state, struct lua_cdata * cdata); +/* 销毁一个data结构, 只有string类型需要调用此函数, 其他的情况直接释放即可 */ +void lua_cdata_destory(struct lua_cdata * cdata); + +/* 上下文结构, 保存临时数据 */ +struct lua_context { + lua_State * context_state; + int context_ref_id; +}; +/* 在状态机中生成一个context */ +struct lua_context * lua_context_new(lua_State * state); +/* 将一个context入栈 */ +int lua_context_push_stack(struct lua_context * context); +/* 释放一个context */ +void lua_context_free(struct lua_context * context); /* ***** ***** ***** ***** ***** ***** */ - +/* 此部分主要为插件管理及配置管理相关功能, 实现在lua_plugin_manage.c中 */ struct lua_config_specific; struct lua_script; struct lua_session_plugin; @@ -148,13 +205,13 @@ struct lua_plugin_manage_schema; struct lua_config_specific { /* 插件需要使用的文件名 */ - char *lua_config_specific_file; + char *config_specific_file; /* 插件名称 */ - // char *lua_config_specific_name; + // char *config_specific_name; /* 加载插件需要调用的函数名称 */ - char *lua_config_specific_load_func; + char *config_specific_load_func; /* 卸载插件需要调用的函数名称 */ - char *lua_config_specific_unload_func; + char *config_specific_unload_func; }; void specific_instance_copy(void *dst, const void *src); @@ -184,7 +241,7 @@ struct lua_script int script_instance_init_byname(struct lua_script *script, lua_State *state, const char *filepath, const char *funcname); int script_instance_init_byrefid(struct lua_script *script, lua_State *state, int ref_id); void script_instance_clean(struct lua_script *script); -int script_execute(struct lua_script *script); +int script_execute(struct lua_script *script, int pcount, struct lua_cdata * param, int rmaxcount, struct lua_cdata * rvalue); /* 每一个插件的函数信息 */ struct lua_session_plugin @@ -209,21 +266,21 @@ void session_plugin_instance_destory(void *elt); struct lua_plugin_env { /* 插件注册的状态机 */ - lua_State *lua_plugin_env_state; + lua_State *plugin_env_state; /* 该环境数据中包含的所有插件列表 */ - UT_array *lua_plugin_env_plugin_array; + UT_array *plugin_env_plugin_array; /* 加载插件的lua函数 */ - struct lua_script lua_plugin_env_load_func; + struct lua_script plugin_env_load_func; /* 卸载插件的lua函数 */ - struct lua_script lua_plugin_env_unload_func; + struct lua_script plugin_env_unload_func; /* 该插件运行环境数据的名称, 在创建时同时在状态机中创建该名称的命名空间 */ /* 插件申请lua内的全局变量可以保存在该命名空间内, 防止被其他内容覆盖 */ - // char * lua_plugin_env_name; + // char *plugin_env_name; /* 在lua中保存运行数据的引用ID */ - int lua_plugin_env_ref_id; /* plugin_env */ + int plugin_env_ref_id; /* plugin_env */ }; /* 此时不创建session_array, 在调用load函数过程中创建 */ @@ -234,16 +291,16 @@ void plugin_env_instance_destory(void *elt); struct lua_thread_state { /* 创建状态机的线程ID */ - int lua_thread_id; + int thread_id; /* 已经插入的插件数量 */ - int lua_thread_plugin_count; + int thread_plugin_count; /* 生成的状态机 */ - lua_State *lua_thread_state; + lua_State *thread_state; // struct lua_pl_state_private * lua_thread_private; /* 该线程状态机中注册的插件列表 */ - UT_array *lua_thread_env_array; + UT_array *thread_env_array; /* 状态机的启动时间 */ - time_t lua_thread_begin_time; + time_t thread_begin_time; }; int thread_state_instance_init(struct lua_thread_state *thread_state, int state_id); @@ -262,11 +319,13 @@ struct lua_plugin_manage_schema /* 防止参数错误, 暂时定一个上限 */ #define LUA_PLUGIN_MANAGE_MAX_THREAD_COUNT 10 -void *lpm_ctx_new_func(struct session *sess, void *plugin_env); -void lpm_ctx_free_func(struct session *sess, void *sess_ctx, void *plugin_env); -void lpm_on_session_msg_func(struct session *sess, int topic_id, const void *msg, void *sess_ctx, void *plugin_env); - int lua_plugin_manage_config_load(struct lua_plugin_manage_schema *schema, const char *config_file_name); int lua_plugin_manage_thread_load(struct lua_plugin_manage_schema *schema, int thread_count); +/* ***** ***** ***** ***** ***** ***** */ +/* 此部分为注册至C中的lua通用函数, 实现在lua_plugin_cfunc.c中 */ +void *lpm_ctx_new_func(struct session *sess, void *plugin_env); +void lpm_ctx_free_func(struct session *sess, void *sess_ctx, void *plugin_env); +// void lpm_on_session_msg_func(struct session *sess, int topic_id, const void *msg, void *sess_ctx, void *plugin_env); + #endif
\ No newline at end of file |
