2014-09-05 50 views
1

我工作的XMPP聊天應用程序在Android中,使用Prosody作爲XMPP server failes創建多用戶組。 我寫的代碼創建Multi User Chat室,其工作正常,當我使用Openfire作爲服務器,但是當我使用Prosody作爲服務器時,它給我的錯誤,因爲與Android(aSmack)韻律服務器以「確認丟失室創建的」

Creation failed - Missing acknowledge of room creation.: 即組已經存在。但它會爲任何名稱(新組名稱)引發相同的錯誤。

如果我muc.join(name);取代muc.create(name);它創建組。但然後我無法配置組/房間屬性。

下面

是我的韻律配置文件: -

modules_enabled = { 

-- Generally required 
    "roster"; -- Allow users to have a roster. Recommended ;) 
    "saslauth"; -- Authentication for clients and servers. Recommended if you want to log in. 
    --"tls"; -- Add support for secure TLS on c2s/s2s connections 
    "dialback"; -- s2s dialback support 
    "disco"; -- Service discovery 

-- Not essential, but recommended 
    "private"; -- Private XML storage (for room bookmarks, etc.) 
    "vcard"; -- Allow users to set vCards 

-- These are commented by default as they have a performance impact 
    --"privacy"; -- Support privacy lists 
    --"compression"; -- Stream compression 

-- Nice to have 
    "version"; -- Replies to server version requests 
    "uptime"; -- Report how long server has been running 
    "time"; -- Let others know the time here on this server 
    "ping"; -- Replies to XMPP pings with pongs 
    "pep"; -- Enables users to publish their mood, activity, playing music and more 
    "register"; -- Allow users to register on this server using a client and change passwords 

-- Admin interfaces 
    "admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands 
    --"admin_telnet"; -- Opens telnet console interface on localhost port 5582 

-- HTTP modules 
    "bosh"; -- Enable BOSH clients, aka "Jabber over HTTP" 
    "http_files"; -- Serve static files from a directory over HTTP 

-- Other specific functionality 
    "groups"; -- Shared roster support 
    --"announce"; -- Send announcement to all online users 
    --"welcome"; -- Welcome users who register accounts 
    --"watchregistrations"; -- Alert admins of registrations 
    --"motd"; -- Send a message to users when they log in 
    --"legacyauth"; -- Legacy authentication. Only used by some old clients and bots. 
}; 
allow_registration = true -- Allow users to register new accounts 

VirtualHost "localhost" 

---Set up a MUC (multi-user chat) room server on conference.example.com: 
Component "conference.localhost" "muc" 

我集團創建代碼是: -

       MultiUserChat muc = new MultiUserChat(xmppConnection, room); 

          // Create the room 
          SmackConfiguration.setPacketReplyTimeout(2000); 
          String name = xmppConnection.getUser(); 
          System.out.println("name:- " + name); 
          String name1 = name.substring(0, name.lastIndexOf("@")); 
          System.out.println("name1:- " + name1); 
          System.out.println("group name:- " + grpName); 
          muc.create(name1); 

          // Get the the room's configuration form 
          Form form = muc.getConfigurationForm(); 
          // Create a new form to submit based on the original form 
          Form submitForm = form.createAnswerForm(); 
          // Add default answers to the form to submit 
          for (Iterator<FormField> fields = form.getFields(); fields.hasNext();) { 
           FormField field = (FormField) fields.next(); 

           if (!FormField.TYPE_HIDDEN.equals(field.getType()) && field.getVariable() != null) { 
            // Sets the default value as the answer 
            submitForm.setDefaultAnswer(field.getVariable()); 
           } 
          } 
         // muc.sendConfigurationForm(submitForm); 

          Form f = new Form(Form.TYPE_SUBMIT); 
          try { 
           muc.sendConfigurationForm(f); 
          } catch (XMPPException xe) { 
           System.out.println("Error on sendConfigurationForm:- " + xe); 
          } 

          // Sets the new owner of the room 
          List<String> owners = new ArrayList<String>(); 
          owners.add(xmppConnection.getUser()); 
          submitForm.setAnswer("muc#roomconfig_roomowners", owners); 
          submitForm.setAnswer("muc#roomconfig_persistentroom", true); 
          muc.sendConfigurationForm(submitForm); 

我要去的地方錯了嗎?

+0

java代碼的縮進不必要使得它難以閱讀,請解決這個問題。 – Flow 2014-09-05 07:47:46

回答

2

這是通過韻律的MUC插件的不規範行爲引起的。基本上,它就像一個MUC房間已經存在,即使情況並非如此。

你必須possibilites:

既然你要配置的房間,唯一的選擇就是改變韻律的restrict_room_creation設置指定韻律表現。

注意,還有另外一個issue in Smack's MUC code,將被固定在4.1啪和likely there will also be a workaround implemented in prosody.但我不認爲這個問題在這裏相關的信息僅僅是爲了保持完整性。