2016-06-23 48 views
5

Sto tentando di creare una chat multiutente. Sto ottenendo errori mentre mi unisco alla stanza. Metodo di creazione di chat room:Errore durante l'accesso alla stanza MUC in 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(); 
      } 
     } 

Metodo per la giunzione camera 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(); 
     } 
    } 

Ottenere lista di stanza unito dall'utente:

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

Mentre utente unirsi alla stanza ottengo questo messaggio: "Questa stanza è bloccata dall'ingresso fino alla conferma della configurazione."

risposta

2

camera non è realmente disponibile (confermato) dopo l'invio di una configurazione, il creatore deve unirsi dopo

multiUserChat.sendConfigurationForm(submitForm); 

in modo sostanzialmente creatore deve anche

multiUserChat.join(username) 

(se non è necessario rimanere all'interno, eseguire un muc.leave() dopo un join)

+0

Ho inviato la configurazione durante la creazione di spazio. Devo inviare di nuovo la configurazione mentre mi unisco alla stanza? E la stanza esiste (c'è entrata per stanza nel database) – Jennifer

+0

No, solo per creare tempo, ma "creare" è completato SOLO dopo che il CREATORE si unisce alla stanza. Tuttavia, probabilmente per una stanza di perseveranza dovrai anche inviare il creatore della configurazione come proprietario (muC# roomconfig_roomowners -> Lista di proprietari) – MrPk

+0

Sto provando ad unirmi al membro qui per la chat room. Quindi anche per questo ho bisogno di aggiungere i proprietari di stanze? Ho bisogno di aggiungere i membri della stanza più tardi, quindi non posso aggiungerlo durante la creazione della stanza MUC – Jennifer