2012-12-28 48 views
2

我现在正在尝试在android中使用asmack-android-7.jar api构建XMPP MUC房间。首先,我创建一个即时房间,然后给房间添加一个粘音听众。代码片段如下:为什么我的xmpp 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/[email protected]"><body>I love you</body><x xmlns="jabber:x:event"><offline/><delivered/><displayed/><composing/></x></message> 

,好像有一个或铁道部消息e扩展一直运行良好,而没有扩展的扩展往往有时会失败。我对此非常困惑,任何人都可以告诉我发生了什么事?我会很感激你的想法。

我发现的另一个问题是,如果我第一次创建一个即时房间,然后加入房间而不创建一个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); 

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

回答

0

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

相关问题