2016-06-23 10 views
5

Ich versuche, einen Multi-User-Chat zu erstellen. Ich bekomme Fehler, wenn ich mich dem Raum anschließe. Verfahren zum Erstellen von Chat-Raum:Fehler beim Verbinden von MUC-Raum 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(); 
      } 
     } 

Methode für MUC Zimmer Beitritt:

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

Erste Liste der verbundenen Zimmer von Benutzer:

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

Während Benutzer registrieren um den Raum ich das bekommen Nachricht: "Dieser Raum ist vom Eingang bis zur Bestätigung der Konfiguration gesperrt."

Antwort

2

Zimmer nicht wirklich verfügbar ist (bestätigt) nach Senden einer Konfiguration, hat der Schöpfer nach

multiUserChat.sendConfigurationForm(submitForm); 

so dass im Grunde Schöpfer beitreten will, muß auch

multiUserChat.join(username) 

(wenn Sie nicht tun müssen, Bleib drinnen, führe eine muc.leave() nach einer Verbindung aus)

+0

Ich habe Konfiguration senden, während ich Raum erschaffe. Muss ich die Konfiguration erneut senden, während ich dem Raum beitrete? Und Zimmer existiert (es gibt Eintrag für Zimmer in der Datenbank) – Jennifer

+0

Nein, nur auf die Zeit zu erstellen, aber "create" ist abgeschlossen, NUR nachdem der CREATOR dem Raum beigetreten ist. Wahrscheinlich müssen Sie aber auch einen Konfigurations-Ersteller als Besitzer senden (muC# roomconfig_roomowners -> List der Eigentümer) – MrPk

+0

Ich möchte Mitglied hier für Chatroom werden. Also muss ich auch Raumbesitzer hinzufügen? Ich muss später Raummitglieder hinzufügen, also kann ich es nicht während der Erstellung von MUC Raum hinzufügen – Jennifer

Verwandte Themen