XMPP aSmack MultiUserChat服务器继续发送已收到的消息

时间:2012-02-15 18:51:42

标签: android xmpp asmack

我是堆栈上的新用户,但我在aSmack库3.2.1 for Android中遇到MultiUserChat问题。我正在使用“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 个答案:

答案 0 :(得分:3)

在“@ 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 expected”和类似“&lt; / stream:stream&gt;”的东西在logcat的最后位置。

我开始谷歌这个问题并找到原因。我使用asem来自beem客户端(顺便说一句,之前我使用asmack-7来自asmack开发人员)以及我怎么知道它是基于smack 3.1 ...我发现smack 3.2.0决定了这个问题。我下载了asmack的Flow's version,我很高兴。

总之,我想说“谢谢!!!”流向正确版本的aSmack,它比其他版本更好。

答案 1 :(得分:1)

这不是因为您的客户端,这不是错误,因为您的服务器的GroupChat的历史记录设置配置为在进入房间时发送特定数量的聊天记录