【修改】修改外部接口,对外仅暴露创建和退出两个接口
This commit is contained in:
@@ -1,136 +1,25 @@
|
||||
/*************************************************************************
|
||||
> File Name: lua_plugin_manage.h
|
||||
> Author:
|
||||
> Created Time: 2024-07
|
||||
> Author:
|
||||
> Created Time: 2024-08
|
||||
> Encoding : UTF-8
|
||||
************************************************************************/
|
||||
|
||||
/*************************************************************************
|
||||
* version
|
||||
* [ v0.1 ]
|
||||
* 07-31
|
||||
* 1. 新增数据结构
|
||||
* enum LPM_DATATYPE
|
||||
* struct lpm_cdata
|
||||
* struct lpm_ctable
|
||||
* typedef int (*lpm_cbinding_function)(struct lpm_state *)
|
||||
* 2. 新增接口函数
|
||||
* lpm_cdata_clean
|
||||
* lpm_state_instance_create
|
||||
* lpm_state_instance_free
|
||||
* lpm_state_instance_init
|
||||
* lpm_cbinding_get_params_count
|
||||
* lpm_cbinding_get_params
|
||||
* lpm_cbinding_push_return
|
||||
* lpm_cbinding_function_register
|
||||
* lpm_cbinding_function_remove
|
||||
* lpm_cdata_register
|
||||
* lpm_cdata_remove
|
||||
* lpm_plugin_load
|
||||
* lpm_plugin_unload
|
||||
* lpm_ctx_new_func
|
||||
* lpm_ctx_free_func
|
||||
* lpm_on_session_msg_func
|
||||
* lpm_trans_data_luatoc
|
||||
* lpm_trans_data_ctolua
|
||||
* 08-01
|
||||
* 1. 修改外部暴露接口
|
||||
* lua_plugin_manage_init
|
||||
* lua_plugin_manage_exit
|
||||
* 2. 声明数据结构
|
||||
* struct lua_plugin_manage_schema
|
||||
************************************************************************/
|
||||
#ifndef LUA_PLUGIN_MANAGE_INCLUDE_H
|
||||
#define LUA_PLUGIN_MANAGE_INCLUDE_H
|
||||
#pragma once
|
||||
|
||||
#include "stellar.h"
|
||||
|
||||
struct lpm_state;
|
||||
struct lua_plugin_manage_schema;
|
||||
|
||||
enum LPM_DATATYPE
|
||||
{
|
||||
LPM_DATATYPE_NULL = 0,
|
||||
LPM_DATATYPE_NIL,
|
||||
LPM_DATATYPE_BOOL,
|
||||
LPM_DATATYPE_NUM,
|
||||
LPM_DATATYPE_INT,
|
||||
LPM_DATATYPE_CSTRING,
|
||||
LPM_DATATYPE_CTABLE,
|
||||
LPM_DATATYPE_CUSER,
|
||||
LPM_DATATYPE_CONTEXT,
|
||||
LPM_DATATYPE_END
|
||||
};
|
||||
|
||||
struct lpm_cdata;
|
||||
struct lpm_ctable;
|
||||
|
||||
struct lpm_cdata {
|
||||
enum LPM_DATATYPE data_type;
|
||||
int data_length;
|
||||
union {
|
||||
int data_bool;
|
||||
double data_num;
|
||||
int data_int;
|
||||
char * data_string;
|
||||
struct lpm_ctable * data_table;
|
||||
void * data_user;
|
||||
void * data_context;
|
||||
};
|
||||
};
|
||||
|
||||
void lpm_cdata_clean(struct lpm_cdata * data);
|
||||
|
||||
/* 创建一个lua plugin manage状态机实例 */
|
||||
/* return lpm_state instance */
|
||||
struct lpm_state * lpm_state_instance_create(void);
|
||||
/* 释放一个lua plugin manage状态机实例 */
|
||||
/* 在plugin_manager使用过程中应该将所有已经加载的插件卸载后再调用此函数 */
|
||||
/* return 0 - success, other - failed */
|
||||
int lpm_state_instance_free(struct lpm_state * state);
|
||||
/* 根据一个配置文件加载所有配置需要加载的插件 */
|
||||
/* return 0 - success, other - failed */
|
||||
int lpm_state_instance_init(struct stellar * st, struct lpm_state * state, const char * filename);
|
||||
|
||||
/* 可以注册至lua状态机实例中的C函数原型 */
|
||||
/* return 1 - lua调用完成后需要处理返回值, 0 - lua调用完后不需要处理返回值 */
|
||||
typedef int (*lpm_cbinding_function)(struct lpm_state *);
|
||||
|
||||
/* 供注册的C函数使用 */
|
||||
/* 获取传入的参数数量 */
|
||||
/* return 参数数量 */
|
||||
int lpm_cbinding_get_params_count(struct lpm_state * state);
|
||||
/* 获取传入的参数, index为参数的下标, 多个参数只能逐个获取 */
|
||||
/* return 0 - success, other - failed */
|
||||
int lpm_cbinding_get_params(struct lpm_state * state, int index, struct lpm_cdata * data);
|
||||
/* 将返回值传入lua, count为返回值数量, data为数据的数组 */
|
||||
/* return 0 - success, other - failed */
|
||||
int lpm_cbinding_push_return(struct lpm_state * state, int count, struct lpm_cdata * data);
|
||||
|
||||
/* 注册一个C函数function至lua中, 调用方式为space_name.func_name格式, space_name可以为空 */
|
||||
/* return 0 - success, other - failed */
|
||||
int lpm_cbinding_function_register(struct lpm_state * state, lpm_cbinding_function function, const char * func_name, const char * space_name);
|
||||
/* 将一个已经注册的function从lua中移除 */
|
||||
/* return 0 - success, other - failed */
|
||||
int lpm_cbinding_function_remove(struct lpm_state * state, const char * func_name, const char * space_name);
|
||||
|
||||
/* 将一个数据注册至lua中, 作为lua中的全局变量使用 */
|
||||
/* return 0 - success, other - failed */
|
||||
int lpm_cdata_register(struct lpm_state * state, struct lpm_cdata * data, const char * data_name, const char * space_name);
|
||||
/* 将一个全局变量从lua中移除 */
|
||||
/* return 0 - success, other - failed */
|
||||
int lpm_cdata_remove(struct lpm_state * state, const char * data_name, const char * space_name);
|
||||
|
||||
/*
|
||||
解决方案:
|
||||
1. 在stellar或状态机中新增一个列表, 调用该函数时每次按顺序从列表中取一个进行调用, 加载完成后每次从列表中删除一个结点
|
||||
2. 增加一个参数, 函数原型修改为
|
||||
void * lpm_plugin_load(struct stellar * st, int id)
|
||||
*/
|
||||
void * lpm_plugin_load(struct stellar * st);
|
||||
void lpm_plugin_unload(void * plugin_env);
|
||||
|
||||
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);
|
||||
|
||||
/* 将lua栈顶的一个数据转为一个lpm_cdata结构的数据 */
|
||||
int lpm_trans_data_luatoc(struct lpm_state * state, struct lpm_cdata * data);
|
||||
/* 将一个lpm_cdata结构的数据转为一个lua数据并入栈至栈顶 */
|
||||
int lpm_trans_data_ctolua(struct lpm_state * state, struct lpm_cdata * data);
|
||||
|
||||
#endif
|
||||
struct lua_plugin_manage_schema * lua_plugin_manage_init(struct stellar * st, const char * config_file_path);
|
||||
void lua_plugin_manage_exit(struct lua_plugin_manage_schema * lua_plug_mgr);
|
||||
Reference in New Issue
Block a user