跳到主要内容

插件的公开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_versionapi 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。