2015-02-09 89 views
0

從asmack遷移到smack 4.1 beta2。 創建的muc房間不再持久。如何創建持久的muc房間中的smack 4.1 beta2

MultiUserChatManager mucm=MultiUserChatManager.getInstanceFor(connection); 
muc=mucm.getMultiUserChat(groupid+"@conference.localhost"); 
DiscussionHistory histroy=new DiscussionHistory(); 
histroy.setMaxStanzas(10); 
muc.createOrJoin(username,null,histroy,SmackConfiguration.getDefaultPacketReplyTimeout()); 
muc.nextMessage(); 

用gajim創建時,房間是持久的。

編輯:這是我們以前使用的代碼。默認情況下,聊天室呈持續性,

muc = new MultiUserChat(connection, groupid+"@conference.localhost"); 

if(!muc.isJoined()) 
{ 
DiscussionHistory histroy=new DiscussionHistory(); 
histroy.setMaxStanzas(10); 
muc.join(username,null,histroy,SmackConfiguration.getDefaultPacketReplyTimeout()); 
muc.nextMessage(0); 
} 
+1

您以前是如何創建持久性房間的?我認爲你需要使用'MultiUserChat.create'發送正確的數據論壇來創建一個持久空間。 – Flow 2015-02-09 13:42:45

+0

你好@flow請檢查編輯的問題。 – Vignesh 2015-02-10 06:27:54

回答

3

您需要設置muc#roomconfig_persistentroomtrue在MUC配置從當創建房間。

MultiuserChat muc = manager.getMultiUserChat("[email protected]"); 
muc.create("myNick"); 
// room is now created by locked 
Form form = muc.getConfigurationForm(); 
Form answerForm = form.createAnswerForm(); 
answerForm.setAnswer("muc#roomconfig_persistentroom", true); 
muc.sendConfigurationForm(answerForm); 
// sending the configuration form unlocks the room 

請注意,並非所有的XMPP MUC服務都支持持久性會議室。欲瞭解更多信息,請參閱:

+1

我認爲answerForm.setAnswer(「muc#roomconfig_persistentroom」,「true」);應該是answerForm.setAnswer(「muc#roomconfig_persistentroom」,true);而不是String一個布爾值。 – AB1209 2016-01-14 09:32:44

5

您需提交像這樣把一個持久組:

private void setConfig(MultiUserChat multiUserChat) { 
    try { 
     Form form = multiUserChat.getConfigurationForm(); 
     Form submitForm = form.createAnswerForm(); 
     for (Iterator<FormField> fields = submitForm.getFields(); fields.hasNext();) { 
      FormField field = (FormField) fields.next(); 
      if (!FormField.TYPE_HIDDEN.equals(field.getType()) && field.getVariable() != null) { 
       submitForm.setDefaultAnswer(field.getVariable()); 
      } 
     } 
     submitForm.setAnswer("muc#roomconfig_publicroom", true); 
     submitForm.setAnswer("muc#roomconfig_persistentroom", true); 
     multiUserChat.sendConfigurationForm(submitForm); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
}