使用 Vala 通过 DBus 将 FD 传递给未命名的管道
Passing a FD to an unnamed pipe over DBus using Vala
我正在尝试通过 DBus 从一个应用程序向另一个请求 Unix 文件描述符的请求发送控制消息,从而在应用程序之间发送一大块数据。我有它,以便客户端可以请求它,服务器创建一个包含 UnixFDList
的 DBus 消息,客户端收到一条回复消息,但它不包含任何内容。在 Vala 的服务器端,DBusConnection
对象是使用 register_object
设置的,不幸的是,Vapi 隐藏了所有 C 示例使用的 DBusInterfaceVTable
参数,它让我为方法调用指定一个委托。我试过使用 register_object_with_closures
代替,但我似乎无法让它工作,而且 Vala 中的 Closure
对象很遗憾没有记录。
在我看来,我需要其中一种方法来接收来自 DBusMethodInvocation
对象的消息,该消息是通过调用 DBusInterfaceMethodCallFunc
委托获得的,您可以创建回复消息。有没有一种方法可以指定与 register_object_with_closures
一起使用的闭包 class,或者可以指定一个 DBusInterfaceVTable
对象作为服务数据的一部分?
我知道一种选择是仅在 C 中创建服务,但我更愿意弄清楚并理解它在 Vala 中的工作原理。
Vala 在内部对包含 GLib.UnixInputStream、GLib.UnixOutputStream、GLib.Socket 或 GLib.FileDescriptorBased.
类型参数的方法使用 UnixFDList
示例:
[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;
}
我正在尝试通过 DBus 从一个应用程序向另一个请求 Unix 文件描述符的请求发送控制消息,从而在应用程序之间发送一大块数据。我有它,以便客户端可以请求它,服务器创建一个包含 UnixFDList
的 DBus 消息,客户端收到一条回复消息,但它不包含任何内容。在 Vala 的服务器端,DBusConnection
对象是使用 register_object
设置的,不幸的是,Vapi 隐藏了所有 C 示例使用的 DBusInterfaceVTable
参数,它让我为方法调用指定一个委托。我试过使用 register_object_with_closures
代替,但我似乎无法让它工作,而且 Vala 中的 Closure
对象很遗憾没有记录。
在我看来,我需要其中一种方法来接收来自 DBusMethodInvocation
对象的消息,该消息是通过调用 DBusInterfaceMethodCallFunc
委托获得的,您可以创建回复消息。有没有一种方法可以指定与 register_object_with_closures
一起使用的闭包 class,或者可以指定一个 DBusInterfaceVTable
对象作为服务数据的一部分?
我知道一种选择是仅在 C 中创建服务,但我更愿意弄清楚并理解它在 Vala 中的工作原理。
Vala 在内部对包含 GLib.UnixInputStream、GLib.UnixOutputStream、GLib.Socket 或 GLib.FileDescriptorBased.
类型参数的方法使用 UnixFDList示例:
[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;
}