почему мой прослушиватель сообщений xmpp muc иногда не работает

Сейчас я пытаюсь создать комнату XMPP MUC в Android, используя API asmack-android-7.jar. Сначала я создаю мгновенную комнату, затем добавляю в нее прослушиватель 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, тогда к комнате не могут присоединиться другие, например, с помощью искрового клиента, а затем получить сообщение об ошибке, говорящее, что комнаты не существует, если быть точным, фрагмент кода выглядит так:

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);

Я действительно чувствую разочарование по поводу этих вещей, все идеи приветствуются. Большое спасибо.


person gothion    schedule 28.12.2012    source источник


Ответы (1)


У меня есть простое решение второго вопроса: вам не нужно и не следует присоединяться к комнате сразу после того, как вы ее создали. Потому что на самом деле они в какой-то степени означают одно и то же, а явление, описанное выше, как-то связано с реализацией функций create() и join() в библиотеке smack.

person gothion    schedule 22.03.2013