Можно ли генерировать неблокирующие вызовы с помощью dbusxx-xml2cpp?

Я хотел бы генерировать заголовки C ++, используя dbusxx-xml2cpp где некоторые методы неблокируют, например, с помощью 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

Решение

Используйте аннотацию 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));
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector