Ich bin neu in D-Bus (und zu Python, Doppel-Whammy!) Und ich versuche herauszufinden, der beste Weg, etwas zu tun, das im Tutorial besprochen wurde.Wie erstelle ich einen D-Bus-Dienst, der mehrere Objekte dynamisch erstellt?
jedoch ein Texteditor könnte als besitzen problemlos mehrere Busnamen (zum Beispiel org.kde.KWrite in Zusätzlich zu den allgemeinen Texteditor), haben mehrere Objekte (vielleicht /org/kde/documents/4352, wo die Zahl ändert sich entsprechend der Dokument), und jedes Objekt könnte mehrere Schnittstellen wie org.freedesktop.DBus.Introspectable, org.freedesktop.BasicTextField, org.kde.RichTextDocument implementieren.
Zum Beispiel sagt, dass ich einen Wrapper um flickrapi
so erstellt werden soll, dass der Dienst eine Handvoll von Flickr-API-Methoden aussetzen kann (zum Beispiel urls_lookupGroup()
). Dies ist relativ einfach, wenn ich davon ausgehen möchte, dass der Dienst immer denselben API-Schlüssel angibt und dass die Authentifizierungsinformationen für alle Benutzer identisch sind, die den Dienst verwenden.
Gerade im letzteren Fall kann ich nicht wirklich davon ausgehen, dass dies wahr sein wird.
auf der Dokumentation Basierend oben zitiert, ich gehe davon aus es so etwas wie das sein sollte:
# 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')
Also, meine Fragen:
1) Ist dies, wie diese behandelt werden sollte?
2) Wenn ja, wie weiß der Dienst, wann der Client fertig ist? Gibt es eine Möglichkeit, festzustellen, ob der aktuelle Client eine Verbindung unterbrochen hat, damit der Dienst seine dynamisch erstellten Objekte bereinigen kann? Wie würde ich die einzelnen Objekte überhaupt erstellen?
3) Wenn dies nicht so gehandhabt wird, was sind andere Vorschläge, um etwas Ähnliches zu erreichen?
Ich habe eine Reihe von D-Bus Tutorials und verschiedene Dokumentationen gelesen und über das, was mir am nächsten kommt, was ich gesucht habe, ist das, was ich oben zitiert habe. Keines der Beispiele sieht jedoch so aus, als ob ich etwas tun würde. Ich bin mir nicht sicher, wie es weitergehen soll.