Сервер XMPP aSmack MultiUserChat продолжает отправлять уже полученные сообщения - PullRequest
5 голосов
/ 15 февраля 2012

Я новый пользователь в стеке, но у меня проблема с MultiUserChat в библиотеке sSmack 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 и что здесь происходит с задержкой доставки?

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

Ответы [ 2 ]

3 голосов
/ 17 февраля 2012

В случае «@ 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 решил эту проблему. Я скачал Flow версию asmack, и я доволен этим.

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

1 голос
/ 18 июля 2014

это не из-за вашего клиента, и это не ошибка, потому что настройки истории в GroupChat вашего сервера сконфигурированы для отправки определенного количества истории чата при входе в комнату

...