سؤال

أرغب في إنشاء عميل XMPP بسيط في Java يشارك موقعه (XEP-0080) مع عملاء آخرين. أعلم بالفعل أنه يمكنني استخدام مكتبة Smack لـ XMPP وأنها تدعم PEP ، وهو أمر مطلوب لـ XEP-0080. هل لدى أي شخص مثال على كيفية تنفيذ هذا أو أي مؤشرات ، لا أجد أي شيء يستخدم Google.

شكرا مقدما.

هل كانت مفيدة؟

المحلول

حق كريستوف ، المستندات متناثرة - لكنها تتحسن. هناك مجموعة جيدة ، وإن كان من الصعب العثور عليها ، مجموعة من المستندات على الامتدادات. PubSub واحد في http://www.igniterealtime.org/fisheye/browse/~raw،r=11613/svn-org/smack/trunk/documentation/extensions/pubsub.html.

بعد الانتقال إلى مسار مزود IQ Custom Custom مع تمديد وجدت أنه من الأسهل القيام بذلك باستخدام المديرين قدر الإمكان. قام المطورون الذين كتبوا المديرين بإخراج الكثير من نقاط الألم.

مثال (نسخة معدلة مقابل Geoloc من أحد rcollier كتبت في منتدى 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);

أو على الأقل هذه هي الطريقة الصعبة :). فقط تذكرت أن هناك الآن 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.

نصائح أخرى

لقد غطيت مقاربة قائمة على PEP خالصة كوسيلة بديلة بالتفصيل لنظام Android هنا: https://stackoverflow.com/a/26719158/406920.

سيكون هذا قريبًا جدًا مما يجب عليك فعله مع الضرب العادي.

ألق نظرة على الكود الحالي لتطبيقات الامتدادات الأخرى. سيكون هذا أفضل مثال لك على كيفية التطوير مع المكتبة الحالية. لسوء الحظ ، لا يوجد دليل مطورين أعرفه ، لذا فقد تجولت لفهم بعض الأساسيات بنفسي حتى شعرت بالراحة مع البيئة. تلميح: استخدم منشأة تمديد مقدمي الخدمات لإضافة مقدمي خدمات مخصصة للتمديد المحدد.

يمكنك طرح أسئلة على منتدى المطورين من أجل Smack ، والمساهمة في الكود الخاص بك مرة أخرى إلى المشروع من هنا أيضًا. إذا كنت تنتج تنفيذًا لهذا الامتداد ، فيمكنك الحصول على امتيازات تلتزم بنفسك إذا كنت تريد ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top