我是 D-Bus 的新手(以及 Python 的新手,双重打击!),我正在尝试找出做本教程中讨论的事情的最佳方法。
但是,文本编辑器应用程序可以很容易地拥有多个总线名称(例如,除了通用 TextEditor 之外,org.kde.KWrite),具有多个对象(可能 /org/kde/documents/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 教程和各种文档,并且我最接近看到我正在寻找的内容是我上面引用的内容。然而,没有一个例子看起来真的做这样的事情,所以我不知道如何继续。