Je suis nouveau à D-Bus (et à Python, double whammy!) Et j'essaie de trouver la meilleure façon de faire quelque chose qui a été discuté dans le tutoriel.Comment créer un service D-Bus qui crée dynamiquement plusieurs objets?
Cependant, pourrait aussi facilement application éditeur de texte posséder plusieurs noms de bus (par exemple, org.kde.KWrite en plus TextEditor générique), ont plusieurs objets (peut-être /org/kde/documents/4352 où le nombre change selon le document ), et chaque objet peut implémenter plusieurs interfaces, telles que org.freedesktop.DBus.Introspectable, org.freedesktop.BasicTextField, org.kde.RichTextDocument.
Par exemple, disons que je veux créer une enveloppe autour flickrapi
telle que le service peut exposer une poignée de méthodes API Flickr (par exemple, urls_lookupGroup()
). Ceci est relativement simple si je veux supposer que le service spécifiera toujours la même clé API et que les informations d'authentification seront les mêmes pour tous les utilisateurs du service.
Surtout dans le dernier cas, je ne peux pas vraiment supposer que ce sera vrai.
Sur la base de la documentation citée plus haut, je suppose qu'il devrait y avoir quelque chose comme ceci:
# 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')
Alors, mes questions:
1) Est-ce comment cela doit être manipulé?
2) Si oui, comment le service saura-t-il que le client a terminé? Existe-t-il un moyen de détecter si le client actuel a rompu la connexion afin que le service puisse nettoyer ses objets créés dynamiquement? Aussi, comment pourrais-je créer les objets individuels en premier lieu?
3) Si ce n'est pas ainsi que cela doit être géré, quelles sont les autres suggestions pour accomplir quelque chose de similaire? J'ai lu un certain nombre de didacticiels D-Bus et de diverses documentations et je me suis rendu compte que ce que je recherchais était ce que j'ai cité ci-dessus. Cependant, aucun des exemples ne cherche à faire quoi que ce soit de ce genre, donc je ne suis pas sûr de savoir comment procéder.