【发布时间】:2009-03-20 20:05:24
【问题描述】:
我是 D-Bus 的新手(以及 Python 的新手,双重打击!),我正在尝试找出做本教程中讨论的事情的最佳方法。
但是,文本编辑器应用程序 可以轻松拥有多个总线名称 (例如,org.kde.KWrite 中 除了通用的 TextEditor),还有 多个对象(也许 /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 教程和各种文档,其中最接近我所寻找的内容就是我上面引用的内容。但是,没有一个示例看起来真的会做这样的事情,所以我不确定如何继续。
【问题讨论】: