为什么我的xmpp muc消息Listener有时无法工作

时间:2012-12-28 13:11:36

标签: android xmpp asmack

我现在正尝试使用asmack-android-7.jar api在android中构建XMPP MUC房间。首先,我创建了一个即时房间,然后我添加了一个muc监听器到房间。代码段如下:

    //create the an instant room if the same room has not been created.
    MultiUserChat muc = new MultiUserChat(mConnection, roomJid);
    muc.create(ownerNickname);
    muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));
    // join a room  and add listener 
   mMuc = new MultiUserChat(mConnection, roomJid);
   mMuc.join(vistorNickname);
   addListenerToMuc(mMuc);
   // the listener function
   private void addListenerToMuc(MultiUserChat muc){
    if(null != muc){
        muc.addMessageListener(new PacketListener() {

            @Override
            public void processPacket(Packet packet) {
                Log.i("processPacket", "receiving message");
                }
        });
    }
}
然后事情变得让我感到困惑,首先,有时候当听众工作得很好但是当我离开房间然后重新加入时,那么听众可能总是无法按照这样的形式处理消息:

 RCV  (723971008): <message id="FdkcR-24" to="寻李白@xjopenfire/KascendVideo" type="groupchat" from="哈特的战争@conference.xjopenfire/nutch"><body> from nutch</body></message>

然而,当收到这样的消息时,听众总能很好地运作:

 <message id="S7JfM-111" to="寻李白@xjopenfire/KascendVideo" type="groupchat" from="哈特的战争@conference.xjopenfire/hangzhou@video"><body>I love you</body><x xmlns="jabber:x:event"><offline/><delivered/><displayed/><composing/></x></message>
似乎具有一个或多个扩展名的消息总是运行良好,而没有扩展名的消息有时会失败。我对此感到很困惑,任何人都可以告诉我发生了什么事吗?我真的很感激你的想法。

我发现的另一个问题是,如果我第一次创建一个即时房间,然后加入房间而不创建一个新的MulitUserChat对象,那么房间不能被其他人加入, 例如,使用spark客户端,然后得到错误,说房间不存在,具体来说,代码片段是这样的:

MultiUserChat mMuc = new MultiUserChat(mConnection, roomJid);
        muc.create(ownerNickname);
        muc.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));
        // join a room  and add listener 
       mMuc.join(vistorNickname);

我真的对这些事情感到沮丧,所有的想法都受到欢迎。非常感谢。

1 个答案:

答案 0 :(得分:0)

我对第二个问题有一个简单的解决方案,你不必在创建它之后立即加入房间。因为它们在某种程度上确实意味着相同的东西,上面描述的现象与smack库的create()和join()函数的实现有关。