2015-06-02 2 views
0

Я использую Smack 4.1.1 как зависимость от Gradle в моем проекте Android.Smack MultiUserChatManager создает не соединяемую комнату

Я успешно установил соединение с моим локальным сервером OpenFire.

Но у меня есть проблема при создании Временный номер от клиента Android.

final MultiUserChat multiUserChat = userChatManager.getMultiUserChat(roomId);   
    try {   
     multiUserChat.create(connection.getUser());   
     LOG.debug("room created");   
    } catch (XMPPException.XMPPErrorException | SmackException e) {   
     LOG.error("create room error:{}", e);   
    }   
    try{   
     multiUserChat.sendConfigurationForm(new Form(DataForm.Type.submit));    
    } catch (SmackException.NoResponseException | XMPPException.XMPPErrorException | SmackException.NotConnectedException e) {   
     LOG.error("sending room configurations error:{}", e);   
    }    

Самое замечательное, что я вижу, что эта комната была создана в панели администратора OpenFire и получает информацию о месте от другого клиента.

try {   
    MultiUserChatManager userChatManager = MultiUserChatManager.getInstanceFor(connection);   
    RoomInfo info = userChatManager.getRoomInfo(roomId);   
    LOG.debug("room has {} occupants", info.getOccupantsCount());   
    joinToExistingRoom(roomId);   
} catch (XMPPException.XMPPErrorException e) {   
    LOG.error("join room error:{}", e);   
    final XMPPError.Condition condition = e.getXMPPError().getCondition();   
    if (condition == XMPPError.Condition.item_not_found) {   
     LOG.error("room does not exist error:{}", e);   
     createRoom(roomId);   
    }   
}   

Но при попытке присоединиться к комнате от второго клиента я получаю XMPPError: получатель-недоступен - ждать.

Отрывок моего joinRoom метод:

final MultiUserChat multiUserChat = userChatManager.getMultiUserChat(roomId);   
    try {   
     multiUserChat.join(connection.getUser());   
     LOG.debug("joined to room:{}", roomId);   
    } catch (SmackException.NoResponseException   
       | XMPPException.XMPPErrorException   
       | SmackException.NotConnectedException e) {   
     LOG.error("error joining room {}", e);   
    }   

Так я ловя ошибки присоединения номер org.jivesoftware.smack.XMPPException $ XMPPErrorException: XMPPError: реципиент-недоступен - ждите

So вопрос в том, что может быть неправильным? Я также пробовал создать submitForm от createAnswerForm() метод. Но результат тот же.

Одно решение, которое я нашел, чтобы сделать его работу, чтобы отправить persistantroom, как истинный в Ответ формы конфигурации. Но этот метод создает постоянную комнату, хотя мне нужна эта комната для уничтожения после того, как все участники покинут комнату.

Возможно, это простая проблема, но теперь я не знаю, как решить эту проблему.

Помощь будет оценена по достоинству.

Заранее спасибо.

ответ

0

create() Документация Метод гласит:

Creates the room according to some default configuration, assign the requesting user as the room owner, and add the owner to the room but not allow anyone else to enter the room (effectively "locking" the room). The requesting user will join the room under the specified nickname as soon as the room has been created. To create an "Instant Room", that means a room with some default configuration that is available for immediate access, the room's owner should send an empty form after creating the room.

Попытка отправить форму конфигурации таким образом:

multiUserChat.create(connection.getUser()) 
Form form = new Form(DataForm.Type.submit); 
multiUserChat.sendConfigurationForm(form); 

Смотрите также muc extension documentation

 Смежные вопросы

  • Нет связанных вопросов^_^