Сейчас я пытаюсь создать комнату 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);
Я действительно чувствую разочарование по поводу этих вещей, все идеи приветствуются. Большое спасибо.