summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorniubinghui <[email protected]>2024-08-19 18:38:22 +0800
committerniubinghui <[email protected]>2024-08-19 18:38:22 +0800
commitcfe51e7c9a7fd7c551eb574475798dd1375ce2b7 (patch)
tree7e96877adeafef91250767b517ca218cd76bea1a
parent99fbd77198a386d3fdc9eb5e1a88f815e0675121 (diff)
【新增】增加新增单个配置的接口
-rw-r--r--example/conf/lua_plugin_manage.toml8
-rw-r--r--example/example_plugin_manage.c7
-rw-r--r--include/lua_plugin_manage.h1
-rw-r--r--src/lua_plugin_manage.c48
4 files changed, 60 insertions, 4 deletions
diff --git a/example/conf/lua_plugin_manage.toml b/example/conf/lua_plugin_manage.toml
index 4e58824..ca68bd5 100644
--- a/example/conf/lua_plugin_manage.toml
+++ b/example/conf/lua_plugin_manage.toml
@@ -4,7 +4,7 @@ path = "./plugin/example_plugin-1.lua"
init = "plugin_load"
exit = "plugin_unload"
-[[plugin]]
-path = "./plugin/example_plugin-2.lua"
-init = "plugin_load"
-exit = "plugin_unload" \ No newline at end of file
+# [[plugin]]
+# path = "./plugin/example_plugin-2.lua"
+# init = "plugin_load"
+# exit = "plugin_unload" \ No newline at end of file
diff --git a/example/example_plugin_manage.c b/example/example_plugin_manage.c
index 0e560d3..1e4a398 100644
--- a/example/example_plugin_manage.c
+++ b/example/example_plugin_manage.c
@@ -32,6 +32,13 @@ int main()
/* 初始化lua插件 */
struct lua_plugin_manage_schema *lua_schema = lua_plugin_manage_init(&st, num, specific);
st.lua_plug_mgr = lua_schema;
+
+ struct lua_config_specific add_specific = {NULL, NULL, NULL};
+ add_specific.config_specific_file = "./plugin/example_plugin-2.lua";
+ add_specific.config_specific_load_func = "plugin_load";
+ add_specific.config_specific_unload_func = "plugin_unload";
+
+ lua_plugin_manage_load_one_specific(st.lua_plug_mgr, &add_specific);
#ifdef DEBUG_PLUGIN_SCHEMA
debug_plugin_manage_schema(plug_mgr);
#endif
diff --git a/include/lua_plugin_manage.h b/include/lua_plugin_manage.h
index 6259a3d..b048b1d 100644
--- a/include/lua_plugin_manage.h
+++ b/include/lua_plugin_manage.h
@@ -35,4 +35,5 @@ struct lua_config_specific
struct lua_plugin_manage_schema;
struct lua_plugin_manage_schema *lua_plugin_manage_init(struct stellar *st, int specific_count, struct lua_config_specific *specifics);
+int lua_plugin_manage_load_one_specific(struct lua_plugin_manage_schema *schema, struct lua_config_specific *specific);
void lua_plugin_manage_exit(struct lua_plugin_manage_schema *lua_plug_mgr); \ No newline at end of file
diff --git a/src/lua_plugin_manage.c b/src/lua_plugin_manage.c
index 871d8e2..c5c17b7 100644
--- a/src/lua_plugin_manage.c
+++ b/src/lua_plugin_manage.c
@@ -338,6 +338,9 @@ struct lua_plugin_manage_schema *lua_plugin_manage_init(
memset(new_schema->thread_state, 0, thread_count * sizeof(lua_State *));
/* 为将要加载的模块预分配内存 */
new_schema->model_count = specific_count;
+ /* 如果没有配置, 也应该算是创建成功 */
+ if ( specific_count == 0 )
+ return new_schema;
new_schema->model = (struct lua_model *)calloc(specific_count, sizeof(struct lua_model));
if (__glibc_unlikely(!new_schema->model))
{
@@ -396,6 +399,51 @@ struct lua_plugin_manage_schema *lua_plugin_manage_init(
* Return:
* Description:
*/
+int lua_plugin_manage_load_one_specific(
+ struct lua_plugin_manage_schema *schema,
+ struct lua_config_specific *specific)
+{
+ if (__glibc_unlikely(!schema || !specific))
+ return -1;
+
+ if ( schema->model ) {
+ schema->model = (struct lua_model *)realloc(schema->model, (schema->model_count + 1) * sizeof(struct lua_model));
+ schema->model_count += 1;
+ }
+
+ for (int thread_index = 0; thread_index < schema->state_count; ++thread_index)
+ {
+ /* 在状态机中加载specific中的配置 */
+ int load_ret = thread_state_load_specific(schema->thread_state[thread_index],
+ &schema->model[schema->model_count - 1],
+ specific);
+ if (load_ret)
+ {
+ LOGERROR("state load specific failed, ret is %d", load_ret);
+ return -1;
+ }
+
+ /* 调用该模块中的load函数 */
+ int call_load_ret = thread_state_call_load(schema->thread_state[thread_index],
+ &schema->model[schema->model_count - 1],
+ specific,
+ schema->st);
+ if (call_load_ret)
+ {
+ LOGERROR("call state load function failed, ret is %d", call_load_ret);
+ return -1;
+ }
+ }
+ return 0;
+}
+
+/*
+ * Function:
+ * Input:
+ * Output:
+ * Return:
+ * Description:
+ */
void lua_plugin_manage_exit(struct lua_plugin_manage_schema *lua_plug_mgr)
{
if (__glibc_unlikely(!lua_plug_mgr))