是否可以使用dbusxx-xml2cpp生成非阻塞调用?

时间:2014-01-23 07:03:43

标签: c++ code-generation dbus

我想使用dbusxx-xml2cpp生成C ++标头,其中某些方法是非阻塞的,例如使用invoke_method_noreply代替invoke_method。这可能吗?

例如以下XML:

<?xml version="1.0" encoding="UTF-8" ?>
<node name="/me/MyService">
    <interface name="me.MyService">
            <method name="MyMethod">
                    <arg direction="in" type="s" name="argument"/>
            </method>
    </interface>
</node>

会产生(部分):

void MyMethod(const std::string& argument)
{
    ::DBus::CallMessage call;
    ::DBus::MessageIter wi = call.writer();

    wi << argument;
    call.member("MyMethod");
    ::DBus::Message ret = invoke_method (call);
}

但我希望有类似的东西:

void MyMethod(const std::string& argument)
{
    ::DBus::CallMessage call;
    ::DBus::MessageIter wi = call.writer();

    wi << argument;
    call.member("MyMethod");
    bool ret = invoke_method_noreply (call);
}

1 个答案:

答案 0 :(得分:2)

使用注释org.freedesktop.DBus.Method.NoReply“

示例XML:

<node>
  <interface name="org.test.example">
    <method name="NoReplyMethod">
      <arg name="data" direction="in" type="i"/>
      <annotation name="org.freedesktop.DBus.Method.NoReply" value="true"/>
    </method>
  </interface>
</node>

生成的代码:

void NoReplyMethod(const int32_t& data)
{
    ::DBus::CallMessage call;
    ::DBus::MessageIter wi = call.writer();

    wi << data;
    call.member("NoReplyMethod");
    assert (invoke_method_noreply (call));
}