变速器组件

更新时间:
2024-04-25
下载文档

变速器组件

本节内容介绍变速器组件(SubRegulMCom)的使用方法。当一个服务从其它服务订阅资源,该资源发布频率非常快或不能满足当前服务处理频率时,可以使用变速器组件,配置该资源输出频率。变速器组件接收一个订阅资源,可以创建多个事件,每个事件可单独配制事件回调周期。

开发须知

  1. 本节示例可以从模板 demo-subregul 创建工程。

  2. 本示例演示通过变速器组件订阅 VSOA 发布接口,并使用不同于 VSOA 发布接口的频率将接收到的数据打印展示。

  3. 本节仅对变速器组件开发进行最基本的介绍,更详细的使用请参考工程建模-变速器组件。变速器组件模型介绍请参考变速器组件

服务模型

本示例由 2 个服务组成,展示变速器功能。

说明:

  • serc1 VSOA 接口发布事件。

  • serc2 订阅 serc1 的 VSOA 接口。

组件模型与接口

serc1 组件

serc1 服务中定义了一个组件,组件中存在一个定时器事件,每 1 秒进行一次发布。

com1.event1 VSOA 发布接口每秒发布一个数字,并打印发布的内容。

static int numTime = 0;
/*
 * @func: serc1_com1_event1_stimer_vpub_io
 * @thread: timer
 */
ac_result_t serc1_com1_event1_stimer_vpub_io(ac_t *acs)
{
    ac_result_t ret = AC_RET_OK;
    bool port_ret = true;
    vsoa_payload_t out;
    serc1_elem_t _jout;
    serc1_elem_t *jout = &_jout;

    ac_payload_init(&out, NULL, 0, NULL, 0);
    serc1_elem_init(jout);

    /*---------------------------------------------------------------------------------------------------
     * @begin: HANDLE_INIT
     * @desc: make you code below to handle input data, init output data.
     *-------------------------------------------------------------------------------------------------*/
    numTime += 1;
    jout->numt = numTime;
    printf("serc1-com1-event1------ %d\n", jout->numt);
    /*---------------------------------------------------------------------------------------------------
     * @end: HANDLE_INIT
     *-------------------------------------------------------------------------------------------------*/

    out.param = serc1_elem_json_stringify(jout);
    out.param_len = strlen(out.param);
    port_ret = ac_port_pub(acs, "/serc1/puba", &out, FALSE);
    serc1_elem_json_stringify_free(out.param);

    ret = port_ret ? AC_RET_OK : AC_RET_BREAK;

    /*---------------------------------------------------------------------------------------------------
     * @begin: FREE
     * @desc: make you code below to free output data if needed.
     *-------------------------------------------------------------------------------------------------*/

    /*---------------------------------------------------------------------------------------------------
     * @end: FREE
     *-------------------------------------------------------------------------------------------------*/

    return  (ret);
} /* @func-end */

serc2 组件

serc2 服务中定义了一个变速器组件 com1com1 订阅 /serc1/puba VSOA 接口发布。

com1.event1 设置输出周期为 2 秒,并打印输出的数据。

/*
 * @func: serc2_com1_event1_vsub_i
 * @thread: serc1-client
 */
ac_result_t serc2_com1_event1_vsub_i(ac_t *acs, serc1_elem_t *param, void *data, size_t len)
{
    ac_result_t ret = AC_RET_OK;

    /*---------------------------------------------------------------------------------------------------
     * @begin: HANDLE
     * @desc: make you code below to handle input data.
     *-------------------------------------------------------------------------------------------------*/
    printf("serc2-com1-event1------ %d\n", param->numt);
    /*---------------------------------------------------------------------------------------------------
     * @end: HANDLE
     *-------------------------------------------------------------------------------------------------*/

    return  (ret);
} /* @func-end */

com1.event2 设置输出周期为 5 秒,并打印输出的数据。

/*
 * @func: serc2_com1_event2_cbind_i
 */
ac_result_t serc2_com1_event2_cbind_i(ac_t *acs, serc1_elem_t *param, void *data, size_t len)
{
    ac_result_t ret = AC_RET_OK;

    /*---------------------------------------------------------------------------------------------------
     * @begin: HANDLE
     * @desc: make you code below to handle input data.
     *-------------------------------------------------------------------------------------------------*/
    printf("serc2-com1-event2------ %d\n", param->numt);
    /*---------------------------------------------------------------------------------------------------
     * @end: HANDLE
     *-------------------------------------------------------------------------------------------------*/

    return  (ret);
} /* @func-end */

运行结果

serc1com1.event1 每秒发布的数字,如下图所示。

serc2com1.event1 将订阅周期为每 2 秒处理一次,serc2com1.event2 将订阅周期为每 5 秒处理一次,如下图所示。

文档内容是否对您有所帮助?
有帮助
没帮助