2016-06-23 3 views
5

Я пытаюсь создать чат с несколькими пользователями. Я получаю ошибку при входе в комнату. Метод создания чата:Ошибка при входе в комнату MUC в XMPP (smack)

public void createMultiUserChatRoom(String roomName, String nickName) { 

      // Get the MultiUserChatManager 
      MultiUserChatManager multiUserChatManager = MultiUserChatManager.getInstanceFor(connection); 

      // Get a MultiUserChat using MultiUserChatManager 
      MultiUserChat multiUserChat = multiUserChatManager.getMultiUserChat(roomName+"@conference.localhost"); 

      try { 
       multiUserChat.create(nickName); 
       Form form = multiUserChat.getConfigurationForm(); 
       Form submitForm = form.createAnswerForm(); 

       List<FormField> formFieldList = submitForm.getFields(); 
       for (FormField formField : formFieldList) { 
       if(!FormField.Type.hidden.equals(formField.getType()) && formField.getVariable() != null) { 
       submitForm.setDefaultAnswer(formField.getVariable()); 
       } 
       } 

      submitForm.setAnswer("muc#roomconfig_persistentroom", true); 
      submitForm.setAnswer("muc#roomconfig_publicroom", true); 

       multiUserChat.sendConfigurationForm(submitForm); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

способ соединения MUC номер:

public void joinMultiUserChatRoom(String userName, String roomName) { 
     // Get the MultiUserChatManager 
     MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection); 

     // Create a MultiUserChat using an XMPPConnection for a room 
     MultiUserChat multiUserChat = manager.getMultiUserChat(roomName + "@conference.localhost"); 

     DiscussionHistory history = new DiscussionHistory(); 
     history.setMaxStanzas(-1); 
     try { 
      multiUserChat.join(userName, "", history, connection.getPacketReplyTimeout()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

Getting список присоединенной комнату пользователем:

public List<String> getJoinedGroupByUserName(String userName) { 
     // Get the MultiUserChatManager 
     MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection); 
     List<String> joinedRooms = null; 
     try { 
      // Get the rooms where [email protected] has joined 
      joinedRooms = manager.getJoinedRooms(userName+"@conference.localhost"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return joinedRooms; 
    } 

Хотя пользователь присоединиться к комнате я получаю это message: «Эта комната заблокирована от записи до подтверждения конфигурации».

ответ

2

номер это на самом деле не доступны (подтверждено) после отправки конфигурации, создатель должен присоединиться после

multiUserChat.sendConfigurationForm(submitForm); 

так в основном создатель должен также

multiUserChat.join(username) 

(если не нужно оставайтесь внутри, выполните muc.leave() после присоединения)

+0

Я отправляю конфигурацию при создании комнаты. Нужно ли мне снова отправлять конфигурацию при входе в комнату? И комната существует (есть запись для комнаты в базе данных) – Jennifer

+0

Нет, просто создайте время, но «создайте» он будет готов ТОЛЬКО после того, как CREATOR присоединится к комнате. Однако, возможно, в комнате для постоянных гостей вы также должны отправить создателя конфигурации в качестве владельца (muC# roomconfig_roomowners -> Список владельцев) – MrPk

+0

Я пытаюсь присоединиться к участнику здесь для чата. Поэтому для этого мне также нужно добавить комнатных владельцев? Мне нужно добавить членов комнаты позже, поэтому я не могу добавить его при создании комнаты MUC – Jennifer