summaryrefslogtreecommitdiff
path: root/src/lua_plugin_manage_internal.h
diff options
context:
space:
mode:
authorniubinghui <[email protected]>2024-08-06 16:16:34 +0800
committerniubinghui <[email protected]>2024-08-06 16:16:34 +0800
commit0f5cbff9740d2526a0b1e18901b709acdfc360af (patch)
tree5fc543d02a8eb21795654612e4c0487578ecfc71 /src/lua_plugin_manage_internal.h
parentdc63983f77361ba94e5bdb4093019c0afda9961c (diff)
【新增】实现数据管理能力
Diffstat (limited to 'src/lua_plugin_manage_internal.h')
-rw-r--r--src/lua_plugin_manage_internal.h103
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