插件的公开API接口
概述
每个插件都必须提供标准的接口实现。 参考:MODBUS插件的公开接口实现>>
公开的 API
typedef struct MODULE_TAG MODULE;
typedef void* MODULE_HANDLE;
typedef struct MODULE_API_TAG MODULE_API;
struct MODULE_TAG
{
const MODULE_API* module_apis;
MODULE_HANDLE module_handle;
};
typedef void*(*pfModule_ParseConfigurationFromJson)(const char* configuration);
typedef void(*pfModule_FreeConfiguration)(void* configuration);
typedef MODULE_HANDLE(*pfModule_Create)(BROKER_HANDLE broker, const void* configuration);
typedef void(*pfModule_Destroy)(MODULE_HANDLE moduleHandle);
typedef void(*pfModule_Receive)(MODULE_HANDLE moduleHandle, MESSAGE_HANDLE messageHandle);
typedef void(*pfModule_Start)(MODULE_HANDLE moduleHandle);
typedef enum MODULE_API_VERSION_TAG
{
MODULE_API_VERSION_1
} MODULE_API_VERSION;
static const MODULE_API_VERSION Module_ApiGatewayVersion = MODULE_API_VERSION_1;
struct MODULE_API_TAG
{
MODULE_API_VERSION version;
};
typedef struct MODULE_API_1_TAG
{
MODULE_API base;
pfModule_ParseConfigurationFromJson Module_ParseConfigurationFromJson;
pfModule_FreeConfiguration Module_FreeConfiguration;
pfModule_Create Module_Create;
pfModule_Destroy Module_Destroy;
pfModule_Receive Module_Receive;
pfModule_Start Module_Start;
} MODULE_API_1;
typedef const MODULE_API* (*pfModule_GetApi)(MODULE_API_VERSION gateway_api_version);
MODULE_EXPORT const MODULE_API* Module_GetApi(MODULE_API_VERSION gateway_api_version);
Module_GetApi
typedef MODULE_API* (*pfModule_GetApi)(MODULE_API_VERSION gateway_api_version);
返回指向MODULES_API
的指针, 如果不成功返回NULL
。
MODULE_API
数据结构包含api_version
和api
union. 参数gateway_api_version
被框架
提供,用于指示框架当前采用的接口版本,因此插件可以提供对应版本的MODULE_API
实现结构来提供
与框架的兼容支持。
Module_Create
static MODULE_HANDLE Module_Create(BROKER_HANDLE broker, const void* configuration);
实现插件的创建函数。第一个传入参数broker
是框架提供句柄,用于未来访问框架提供的API中使用,
因此需要保存起来。 第二个参数configuration
是配置信息,用户启动插件。
插件必须返回一个MODULE_HANDLE
对象,可指向插件自己定义的任何格式数据对象。框架后面继续
调用本插件的其他公开接口时,将使用返回的MODULE_HANDLE
对象作为入口参数。
如果插件创建失败,返回NULL。
Module_Destroy
static void Module_Destroy(MODULE_HANDLE moduleHandle);
框架销毁插件时调用此函数。
moduleHandle
参数是框架调用Module_Create
所返回的数据对象。插件应该对其进行销毁处理。
Module_Receive
static void Module_Receive(MODULE_HANDLE moduleHandle, MESSAGE_HANDLE messageHandle);
插件收到微服务以外的总线消息时,框架将调用此入口函数。messageHandle
指向所接收的消息。
本函数不会被重入,但是不应该假定每一次调用都是从同一个线程中执行。
该函数可以是空实现。
Module_Start
static void Module_Start(MODULE_HANDLE moduleHandle);
框架启动插件时调用此函数,表示开始准备进入消息接收状态。
插件可以不实现此函数,因此在MODULE_API
结构中设置此字段为NULL。
Module_ParseConfigurationFromJson
static void* Module_ParseConfigurationFromJson(const char* configuration);
可以不提供实现或者返回NULL。
Module_FreeConfiguration
static void Module_FreeConfiguration(void* configuration);
用于释放Module_ParseConfigurationFromJson
返回的数据结构。
可以不提供实现或者返回NULL。