1

我正在开发 Android 中的 XMPP 聊天应用程序,使用Prosodyas XMPP server。我已经编写了创建Multi User Chat房间的代码,当我用作服务器时它工作正常Openfire,但是当我Prosody用作服务器时它给了我错误,因为

Creation failed - Missing acknowledge of room creation.: 即组已经存在。但对于任何名称(新组名)都会引发相同的错误。

如果我用它替换muc.create(name);muc.join(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);

我哪里错了?

4

1 回答 1

2

这是由 prosody 的 MUC 插件的非标准行为引起的。基本上它的行为就像一个 MUC 房间已经存在,即使不是这样。

你必须有可能:

由于您要配置房间,唯一的选择是更改韵律restrict_room_creation设置。

请注意, Smack 的 MUC 代码 中还有另一个问题,将在 Smack 4.1 中修复,并且可能还会在韵律中实施解决方法。但我认为这个问题与这里无关,信息只是为了完整性。

于 2014-09-05T07:49:38.123 回答