7

他のクライアントと自分の場所(XEP-0080)を共有するJavaで単純なXMPPクライアントを作成したいと思います。XMPP用のsmackライブラリを使用でき、XEP-0080に必要なPEPをサポートしていることはすでに知っています。誰かがこれまたは任意のポインタを実装する方法の例を持っていますか、私はグーグルを使用して何も見つかりません。

前もって感謝します。

4

3 に答える 3

8

クリストフの言うとおり、ドキュメントはまばらですが、改善されつつあります。見つけるのは難しいですが、拡張機能に関する一連のドキュメントがあります。PubSub はhttp://www.igniterealtime.org/fisheye/browse/~raw,r=11613/svn-org/smack/trunk/documentation/extensions/pubsub.htmlにあります。

拡張機能を使用してゼロからカスタム IQ プロバイダー ルートを作成した後、可能な限りマネージャーを使用する方が簡単であることがわかりました。マネージャーを作成した開発者は、多くの問題点を抽象化しました。

例 (Smack フォーラムに書いた 1 つの rcollier の geoloc 用に修正されたバージョン):

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);

または、少なくともそれは難しい方法です:)。PEPManager があることを思い出しました...

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);

GeoLocProvider および GeoLoc クラスを作成する必要があります。

于 2010-03-10T17:02:46.337 に答える
0

他の拡張機能の実装については、既存のコードを参照してください。これは、現在のライブラリを使用して開発する方法の最良の例です。残念ながら、私が知っている開発者向けガイドはありません。そのため、環境に慣れるまで、いくつかの基本事項を自分で理解するためにざっと調べただけです。ヒント: プロバイダー拡張機能を使用して、拡張固有のスタンザのカスタム プロバイダーを追加します。

Smackの開発者フォーラムで質問したり、ここからプロジェクトにコードを投稿したりすることもできます。この拡張機能の実装を作成すると、必要に応じてコミット権限を自分で取得できる可能性があります。

于 2010-03-05T15:24:13.773 に答える