我是新来d-总线(和Python的,祸不单行!),我试图找出做一些事情,在本教程中讨论的最佳方式。

  

然而,一个文本编辑器应用   可以像它们拥有多个总线名称   (例如,在org.kde.KWrite   除了一般的文本编辑),具有   多个对象(也许   /组织/ KDE /文件/ 4352,其中   根据改变数   文件),并且每个对象可以   实现多个接口,如   org.freedesktop.DBus.Introspectable,   org.freedesktop.BasicTextField,   org.kde.RichTextDocument。

举例来说,假设我想创建围绕flickrapi的包装,使得服务可以暴露的Flickr的API方法(比如说,urls_lookupGroup())屈指可数。如果我想假设使用该服务的服务将始终被指定相同的API密钥,并且将已授权的信息将是每个人都一样,这是比较简单的。

特别是在后者的情况下,我真的不能假定这将是正确的。

基于上面引述的文档上

,我假设应该有这样的:

# Get the connection proxy object.
flickrConnectionService = bus.get_object("com.example.FlickrService",
                                         "/Connection")

# Ask the connection object to connect, the return value would be
# maybe something like "/connection/5512" ...
flickrObjectPath = flickrConnectionService.connect("MY_APP_API_KEY",
                                                   "MY_APP_API_SECRET",
                                                   flickrUsername)

# Get the service proxy object.
flickrService = bus.get_object("com.example.FlickrService",
                               flickrObjectPath);

# As the flickr service object to get group information.
groupInfo = flickrService.getFlickrGroupInfo('s3a-belltown')

所以,我的问题:

1)这是应如何处理?

2)如果是这样,怎么会知道服务客户端时做了什么?有没有一种方法来检测,如果当前的客户端已经打破连接,这样的服务可以清理它的动态创建的对象?此外,如何将我摆在首位创建单个对象?

3)如果不是这个应该怎么处理,什么是完成类似的东西其他一些建议吗?

我已经通过了一些d-Bus的教程和各种文档的阅读和对最接近我来看到我在找的是什么,我上面引述。然而,没有任何的例子看真正做到这样,所以我不知道如何着手任何事情。

有帮助吗?

解决方案

1)晴是的,我将只改变一件事在连接方法如我在第2解释)。

2)d总线连接不会持久,一切都与请求/响应消息来进行,没有连接状态被存储,除非你,你与你的flickerObject做实现这个第三对象。在Python绑定的d-总线对象大多是代理抽象的远程对象,如果你是“连接”到他们,但它确实是建立一个基于你的信息给d-Bus的对象实例化的消息(对象路径,接口等等)。因此,该服务可以不知道什么时候,如果客户端不与其他显式调用宣布,它在客户端完成。

要处理突发性的客户最终确定,您可以创建客户端中的d-Bus的对象,并在连接时发送的对象路径服务,改变你的connect方法也接受一个ObjectPath参数。该服务可以听 NameOwnerChanged 的信号知道,如果一个客户端已经死亡。

要创建单独的对象,你只需要在你与你的“/连接”做同样的服务实例化一个对象,但你必须确保你使用的是unexisting名。你可以有一个 “/连接/管理器” 和各种 “/连接/ 1”, “/连接/ 2” ...

3)如果你需要存储的连接状态,你必须做这样的事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top