了解ubus listen用法

ubus listen

使用方式

ubus 提供event listen功能,測試如下

  • 先帶起ubus listen
    若沒有帶listen的event參數,則全部的event都會收進來

ubus listen event_a

client端送出even_a及參數

ubus send event_a '{"layout":"9x9"}'

此時server將會收到event_a的訊息
其它的event訊息將會被省略 (ex. ubus send event_b xx)

~ # ubus listen event_a
{ "event_a": {"layout":"9x9"} }

一次listen多個event

  • ubus
    listen後面可帶多個event

~ # ubus listen event_b event_c
{ "event_b": {"layout":"2x2"} }
{ "event_c": {"layout":"3x3"} }

client

ubus send event_a '{"layout":"1x1"}'
ubus send event_b '{"layout":"2x2"}'
ubus send event_c '{"layout":"3x3"}'

ubus listen 實現

  1. 由ubus_socket(/var/run/ubus.sock)取得ubusd的ctx

  2. ubus_add_object將目前需要加入ctx裡面

  3. uloop_run: 開始listen fd及等待timeout, 執行callback function

  • ubus listen

ubus-listen.png

ubus register event handler

ubus_register_event_handler.png

需設定ubus_event_handler內的cb
這邊是設定為receive_event

struct ubus_event_handler {
    struct ubus_object obj;

    ubus_event_handler_t cb;
};

receive_event
直接打印取得訊息

static void receive_event(struct ubus_context *ctx, struct ubus_event_handler *ev,
              const char *type, struct blob_attr *msg)
{
    char *str;

    str = blobmsg_format_json(msg, true);
    printf("{ \"%s\": %s }\n", type, str);
    fflush(stdout);
    free(str);
}

ubus send 實現

ubus send

ubus_send.png

ubus_send_event

ubus_send_event.png

本文章由作者:佐须之男 整理编辑,原文地址: 了解ubus listen用法
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐