Я новичок в D-Bus (и в Python, двойной удар!), И я пытаюсь найти лучший способ сделать то, что обсуждалось в учебнике.
Однако приложение для текстового редактора
может так же легко иметь несколько названий шин
(например, org.kde.KWrite в
дополнение к универсальному TextEditor), есть
несколько объектов (возможно
/ org / kde / documents / 4352 где
число меняется в соответствии с
документ), и каждый объект может
реализовать несколько интерфейсов, таких как
org.freedesktop.DBus.Introspectable,
org.freedesktop.BasicTextField,
org.kde.RichTextDocument.
Например, скажем, я хочу создать оболочку около flickrapi
, чтобы служба могла предоставлять несколько методов API Flickr (скажем, 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 и различную документацию, и о том, что я ближе всего увидел к тому, что я ищу, это то, что я цитировал выше. Тем не менее, ни один из примеров, похоже, на самом деле не делает ничего подобного, поэтому я не уверен, что делать дальше.