2012-12-28 71 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()函數的實現有關。

相關問題