我试图在应用程序之间发送大块数据,方法是通过DBus从一个控制消息向另一个发送一个请求Unix文件描述符的控制消息。我拥有它以便客户端可以请求此服务器,服务器创建包含UnixFDList
的DBus消息,并且客户端收到回复消息但它不包含任何内容。在Vala的服务器端,使用DBusConnection
设置register_object
对象,遗憾的是,Vapi隐藏了所有C示例使用的DBusInterfaceVTable
参数,该参数可以让我指定方法调用的委托。我尝试过使用register_object_with_closures
,但我似乎无法将其用于工作,而Vala中的Closure
对象实际上是无法记录的。
在我看来,我需要其中一种方法来接收来自DBusMethodInvocation
委托的调用的DBusInterfaceMethodCallFunc
对象的消息,你可以创建一个回复信息。有没有办法指定一个适用于register_object_with_closures
的闭包类,或者一种指定DBusInterfaceVTable
对象作为服务数据的一部分的方法?
我知道一个选项就是在C中创建服务,但我宁愿弄清楚并理解它在Vala中是如何工作的。
答案 0 :(得分:0)
Vala在内部使用UnixFDList来处理包含GLib.UnixInputStream,GLib.UnixOutputStream,GLib.Socket或GLib.FileDescriptorBased类型参数的方法。
示例:
[DBus(name="eu.tiliado.Nuvola")]
public interface MasterDbusIfce: GLib.Object {
public abstract void get_connection(
string app_id,
string dbus_id,
out GLib.Socket? socket,
out string? token) throws GLib.Error;
}