ubus lua 代码示例

test.lua

此範例來源:ubus-2015-05-25/lua

  • github: test.lua

  • local: [test.lua]

  • ubus.connect
    連接ubusd (/var/run/ubus.sock) 並且加到uloop

  • ctx = ubus_connect()
    ubus_add_uloop(ctx);
  • conn:add(my_method)
    使用ubus_add_object(ctx,obj)跟ubusd注冊新的object

  • conn:listen(my_event)
    使用ubus_register_event_handler注冊新的event
    監聽test event(由ubus send送出的event)
    監聽由ubus_send_event的test event

  • ubus_register_event_handler();
  • conn:reply
    使用ubus_send_reply 回應client

測試ubus server (test.lua)

  • test.lua提供下例method

  • # ubus list -v           
    'broken' @0521ea88
            "hello1":{}
    'test' @89354d57
            "hello":{"id":"Integer","msg":"String"}
            "hello1":{"id":"Integer","msg":"String"}
  • test.lua server log
    test.lua只listen test,因此若為test1則不會有打印
    可使用conn:reply來回應client

    /opt/dvr_board/bin # ./test.lua 
    Call to function broken hello1
    Call to function 'hello'
    key=id value=123
    key=msg value=str123
    Call to function 'hello1'
    Call to test event
    key=layout value=6x6

    ubus command

  • # ubus call test hello '{"id":123, "msg":"str123"}'
    {
            "message": "foo"
    }
    # ubus call test hello1 '{"id":123, "msg":"str123"}'
    {
            "message": "foo1"
    }
    {
            "message": "foo2"
    }
    # ubus send test '{"layout":"6x6"}'     
    # ubus send test1 '{"layout":"6x6"}

test_client.lua

此範例來源:ubus-2015-05-25/lua

  • conn:objects
    ubus_lua_objects
    ubus_lookup

  • conn:call
    ubus_lookup_id : 找obj id
    ubus_invoke : 指定object執行其方法(method)

  • conn:send
    ubus_send_event

測試ubus client (test_client.lua)

  • test_client.lua

  • /opt/dvr_board/bin # ./test_client.lua 
    namespace=broken
            procedure=hello1
    namespace=test
            procedure=hello
                    attribute=id type=5
                    attribute=msg type=3
            procedure=hello1
                    attribute=id type=5
                    attribute=msg type=3
    key=message value=foo
    key=message value=foo1
    key=message value=foo2
  • server

  • Call to function 'hello'
    key=msg value=eth0
    Call to function 'hello1'
    Call to test event
    key=foo value=bar

test_client file

這邊使用conn:object查訊obj-id,只是顯示目前在ubusd內有那些obj
若沒有查訊(conn:object)也是可以送訊

使用conn:object查訊obj-id
使用conn:call執行obj的method,此時return value為server msg
使用conn:send來送event及參數


libusb 介面說明

  • libubs介面說明:
    ubus_register_event_handle: 注册新事件
    ubus_send_event : 发出事件消息
    ubus_connect: 初始化client端context结构,并连接ubusd

  • libus-io介面說明:
    ubus_send_msg: 发送报文 (client上下文對象)

  • libubs-obj介面說明
    ubus_add_object: client端向ubusd server请求增加一个新object

  • libusb-req介面說明

    • libus-io / ubus_send_msg(,UBUS_MSG_DATA)

    • ubus_send_reply: 發送回应信息,消息类型UBUS_MSG_DATA

    • ubus_invoke :  指定object執行其方法(method)


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

相关推荐