Сервер XMPP aSmack MultiUserChat продолжает отправлять уже полученные сообщения

Я новый пользователь в стеке, но у меня проблема с MultiUserChat в aSmack library 3.2.1 для Android. Я использую сервер «gtalk.google.com». Это простой пример, и я только один в комнате:

String room="myConference@conference.jabber.org"; MultiUserChat muc = new MultiUserChat(connection,room); muc.join(userNameInRoom); muc.addMessageListener(new PacketListener() { @Override public void processPacket(Packet packet) { ... } }); 

После:

  muc.sendMessage("Text message"); 

В журнале:

 DEBUG/SMACK(281): 06:46:29 PM SENT (1140866576): <message id="gsMe7-18" to="myConference@conference.jabber.org" type="groupchat"><body>Text message </body></message> DEBUG/SMACK(281): 06:46:29 PM RCV (1140866576): <message from="myConference@conference.jabber.org/userNameInRoom" to="userName" type="groupchat"><body>Text message</body></message> 

Результат: «Текстовое сообщение», и это правильно, но затем:

Я снова получил «Текстовое сообщение» с присутствиями:

 DEBUG/SMACK(281): 06:54:12 PM RCV (1140866576): <presence from="myConference@conference.jabber.org/userNameInRoom" to="userName"><x xmlns= "vcard-temp:x:update"><photo/></x><x xmlns="http://jabber.org/protocol/muc#user"> <item affiliation="owner" role="moderator"/><status code="110"/></x></presence> DEBUG/SMACK(281): 06:54:12 PM RCV (1140866576): <message from="myConference@conference.jabber.org/userNameInRoom" to="userName" type="groupchat"><body>Text message</body><delay stamp="2012-02-15T17:46:31Z" from="myConference@conference.jabber.org" xmlns="urn:xmpp:delay"/><x stamp="20120215T17:46:31" from="myConference@conference.jabber.org" xmlns="jabber:x:delay"/></message> 

И я получал это снова и снова, когда сервер посылал мне подарки. Он бесконечно продолжается с интервалом ~ 5 минут. И Да через 30 минут я получил ~ 6 сообщений «Текстовое сообщение». Если я отправлю более 1 сообщения, все эти сообщения будут получены без исключений, когда присутствие отправит мне.

Какая проблема с моим MultiUserChat и чем отсрочена доставка здесь?

Спасибо за внимание!

В случае с «@ conference.jabber.org» я не нашел решения, и я решил, что проблема из-за сервера GTalk и правильной версии MultiUserChat в случае с «@ groupchat.google.com».

Я изменил свой код:

 room=roomName+"@conference.jabber.org"; MultiUserChat muc = new MultiUserChat(connection, room); muc.create(userName); muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT)); 

чтобы:

 room="private-chat-" + UUID.randomUUID().toString() + "@groupchat.google.com"; MultiUserChat muc = new MultiUserChat(connection, room); muc.join(userName); muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT)); 

И я попробовал это, но у меня возникла новая проблема. Когда пользователь получает сообщение приглашения и принимает его, оба клиента сбой с XmlPullException «END_TAG ожидается» и что-то вроде «</ stream: stream>» в последней позиции в logcat.

Я начал эту проблему и нашел причину. Я использовал asmack от beem-клиента (кстати, до этого я использовал asmack-7 у разработчика asmack) и как я знаю, что он основан на smack 3.1 … Я обнаружил, что smack 3.2.0 решил эту проблему. Я загрузил версию Asmack Flow, и я доволен этим.

В заключение я хочу сказать «Спасибо!» Flow для правильной версии aSmack, которая работает лучше других.

Это не из-за вашего Клиента, и это не ошибка, а потому, что настройки вашего сервера ServerChat's History настроены на отправку определенного номера истории чата после входа в комнату