ubus listen說明
更新記錄
item | note |
---|---|
20170208 | 第一版 |
目錄
ubus listen
使用方式
ubus 提供event listen功能,測試如下
先帶起ubus listen
若沒有帶listen的event參數,則全部的event都會收進來1
ubus listen event_a
client端送出even_a及參數
1
ubus send event_a '{"layout":"9x9"}'
此時server將會收到event_a的訊息
其它的event訊息將會被省略 (ex. ubus send event_b xx)1
2~ # ubus listen event_a
{ "event_a": {"layout":"9x9"} }
一次listen多個event
ubus
listen後面可帶多個event1
2
3
4~ # ubus listen event_b event_c
{ "event_b": {"layout":"2x2"} }
{ "event_c": {"layout":"3x3"} }
^C~ #client
1
2
3ubus send event_a '{"layout":"1x1"}'
ubus send event_b '{"layout":"2x2"}'
ubus send event_c '{"layout":"3x3"}'
ubus listen 實現
- 由ubus_socket(/var/run/ubus.sock)取得ubusd的ctx
- ubus_add_object將目前需要加入ctx裡面
- uloop_run: 開始listen fd及等待timeout, 執行callback function
ubus listen
ubus register event handler
需設定ubus_event_handler內的cb
這邊是設定為receive_event1
2
3
4
5struct ubus_event_handler {
struct ubus_object obj;
ubus_event_handler_t cb;
};receive_event
直接打印取得訊息1
2
3
4
5
6
7
8
9
10static 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_event