2016-06-23 4 views
1

Я пытаюсь создать многопользовательский чат с помощью XMPP (smack). После создания комнаты, когда я пытаюсь присоединиться к чату, нет записи о присоединенном члене в ofmucmember.Добавление участника в MUC в XMPP (SMACK)

Создание номер кода, как показано ниже:

public void createMultiUserChatRoom(String roomName, String nickName) { 

     MultiUserChatManager multiUserChatManager = MultiUserChatManager.getInstanceFor(connection); 

     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); 
      submitForm.setAnswer("muc#roomconfig_enablelogging", true); 
      submitForm.setAnswer("x-muc#roomconfig_reservednick", false); 
      submitForm.setAnswer("x-muc#roomconfig_canchangenick", false); 
      submitForm.setAnswer("x-muc#roomconfig_registration", false); 
      submitForm.setAnswer("muc#roomconfig_passwordprotectedroom", false); 
      submitForm.setAnswer("muc#roomconfig_roomname", roomName); 
      submitForm.setAnswer("muc#roomconfig_whois", Arrays.asList("none")); 
      multiUserChat.sendConfigurationForm(submitForm); 

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

    } 

Код для присоединения к созданной комнате, как показано ниже:

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

      MultiUserChat multiUserChat = manager.getMultiUserChat(roomName + "@conference.localhost"); 
      DiscussionHistory history = new DiscussionHistory(); 
      history.setMaxStanzas(0); 
      try { 
       multiUserChat.join(userName); 
       multiUserChat.sendMessage(userName +" : You have joined the group : " + roomName); 

       Presence presence = multiUserChat.getOccupantPresence(roomName + "@conference.localhost/" + userName); 
       presence.setMode(Presence.Mode.available); 
       connection.sendStanza(presence); 

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

Ответ сервера:

<message to="[email protected]/Smack" id="h7axM-14" type="groupchat" from="[email protected]/roy"><body>roy : You have joined the group : team6</body><x xmlns="jabber:x:delay" stamp="20160623T12:15:50" from="[email protected]/roy"/></message> 
presence :<presence to='[email protected]/Smack' id='WR9Dy-12'><x xmlns='http://jabber.org/protocol/muc#user'><item affiliation='owner' jid='[email protected]/Smack' role='moderator'></item></x><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.igniterealtime.org/projects/smack' ver='NfJ3flI83zSdUDzCEICtbypursw='/></presence> 

Я не получить любую ошибку. Может ли кто-нибудь сказать мне, где я здесь?

ответ

0

Вы не можете создать новую тему по теме. После того, как вы присоединились к комнате, вы являетесь участником Участником в терминологии XEP-0045.

+0

Тогда как этот участник будет иметь вход в базу данных? – Jennifer

+0

Я не думаю, что Openfire сохраняет участников в базе данных – Flow

+0

Да, это сохраняет членов в базе данных. Я проверил его, добавив его с сервера openfire. – Jennifer

1

При заполнении формы конфигурации, вам необходимо заполнить следующие разделы:

<field 
     label='Room Admins' 
     type='jid-multi' 
     var='muc#roomconfig_roomadmins'> 
    <value>[email protected]</value> 
    <value>[email protected]</value> 
    </field> 

<field 
      label='Room Owners' 
      type='jid-multi' 
      var='muc#roomconfig_roomowners'/> 

Admins и владельца сохраняется в ofMucAffiliation таблицы, и если конфигурация обновляется и существующий администратор или владелец не упоминается то сервер предполагает, что его аффилиация была изменена на член, поэтому она перемещает запись в таблицыMucMember.