Kristof ha ragione, i documenti sono scarsi, ma stanno migliorando. Però c'è un buon, anche se difficile da trovare, un insieme di documenti sulle estensioni. Il PubSub è http://www.igniterealtime.org/fisheye/browse/~raw,r=11613/svn-org/smack/trunk/documentation/extensions/pubsub.html.
Dopo aver eseguito il percorso del provider IQ personalizzato da zero con un'estensione, ho scoperto che era più semplice farlo utilizzando i gestori il più possibile. Gli sviluppatori che hanno scritto i responsabili hanno sottratto un sacco di punti dolenti.
Esempio (versione modificata-per-geoloc di uno rcollier ha scritto sul forum Smack):
ConfigureForm form = new ConfigureForm(FormType.submit);
form.setPersistentItems(false);
form.setDeliverPayloads(true);
form.setAccessModel(AccessModel.open);
PubSubManager manager
= new PubSubManager(connection, "pubsub.communitivity.com");
Node myNode = manager.createNode("http://jabber.org/protocol/geoloc", form);
StringBuilder body = new StringBuilder(); //ws for readability
body.append("<geoloc xmlns='http://jabber.org/protocol/geoloc' xml:lang='en'>");
body.append(" <country>Italy</country>");
body.append(" <lat>45.44</lat>");
body.append(" <locality>Venice</locality>");
body.append(" <lon>12.33</lon>");
body.append(" <accuracy>20</accuracy>");
body.append("</geoloc>");
SimplePayload payload = new SimplePayload(
"geoloc",
"http://jabber.org/protocol/geoloc",
body.toString());
String itemId = "zz234";
Item<SimplePayload> item = new Item<SimplePayload>(itemId, payload);
// Required to recieve the events being published
myNode.addItemEventListener(myEventHandler);
// Publish item
myNode.publish(item);
O almeno questo è il modo più duro :). Appena ricordato c'è un PEPManager ora ...
PEPProvider pepProvider = new PEPProvider();
pepProvider.registerPEPParserExtension(
"http://jabber.org/protocol/tune", new TuneProvider());
ProviderManager.getInstance().addExtensionProvider(
"event",
"http://jabber.org/protocol/pubsub#event", pepProvider);
Tune tune = new Tune("jeff", "1", "CD", "My Title", "My Track");
pepManager.publish(tune);
Avresti bisogno di scrivere le classi GeoLocProvider e GEOLOC.
fonte
2010-03-10 17:02:46
dove posso trovare questa classe 'TuneProvider' e' Tune' in smack o asmack? – Hunt
L'esempio è dalla documentazione di smack. Non sono sicuro di quale implementazione di XEP-0118 si riferiscano anche loro, dato che Smack ha ancora un bug aperto per aggiungere il supporto XEP-0118, l'ultimo aggiornamento a maggio 2011. Ho messo insieme la mia versione per un esperimento, ma non lo faccio avere il codice più Lo butterei di nuovo insieme ma non ho tempo. Esiste ora un buon esempio di creazione della propria estensione di PEPItem e pubblicazione di un elemento qui: http://oneminutedistraction.wordpress.com/2010/08/26/. Questo lascia solo la parte di parsing (nel TuneProvider, un PEPProvider). –
Sto usando smack 4.2.0 e non riesco a trovare PEPProvider? – umerk44