Smack - 如何读取多用户聊天室的配置?

3

我尝试使用Java创建一个多用户聊天室。我正在使用smack库。 以下是我创建多用户聊天室的代码:

MultiUserChat muc = new MultiUserChat(connection, "roomname@somehost");
muc.create("mynickname");

Form form = muc.getConfigurationForm();
Form submitForm = form.createAnswerForm();
submitForm.setAnswer("muc#roomconfig_roomname", "A nice formatted Room Name");
submitForm.setAnswer("muc#roomconfig_roomdesc", "The description. It should be longer.");
muc.sendConfigurationForm(submitForm);
muc.addMessageListener(mucMessageListener); // mucMessageListener is a PacketListener

接着,我尝试使用 mucMessageListener 捕获上面创建的房间发送的消息:

private PacketListener mucMessageListener = new PacketListener() {
    public void processPacket(Packet packet) {
        if (packet instanceof Message) {
            Message message = (Message) packet;
            // this is where I got the problem
        }
    }
}

作为接收到消息的另一方(即不是此多用户聊天室所有者的用户),他能否以某种方式获取上述行中设置的值?
submitForm.setAnswer("muc#roomconfig_roomname", "A nice formatted Room Name");

您看,仅获取房间的JID并不适合显示。我希望可以获得一个字符串,其值为“一个漂亮格式的房间名称”。
我们如何获得这个字符串呢?
3个回答

1
您可以轻松地从此代码中获取其名称等配置:
MultiUserChatManager mucManager = MultiUserChatManager.getInstanceFor(connection);
RoomInfo info = mucManager.getRoomInfo(room.getRoom());

现在您可以像这样获取它的信息:
String mucName = info.getName();
Boolean isPersistence = info.isPersistent();

等等。


我在我的应用程序中使用smack和openfire这段代码。Nilax,亲爱的,你能告诉我你的错误是什么吗? - Mahdi Moqadasi
我正在做完全相同的事情。muc.create(Resourcepart.from(nickName));Form form = muc.getConfigurationForm(); Form submitForm = form.createAnswerForm(); submitForm.setAnswer("muc#roomconfig_persistentroom", true); submitForm.setAnswer("muc#roomconfig_membersonly", true); submitForm.setAnswer("muc#roomconfig_roomdesc", room_desc); muc.sendConfigurationForm(submitForm);请问您能否建议我在设置和获取细节方面出了什么问题? - Nil
你创建MUC的代码没问题,如果你确定已经创建了muc并使用multiUserChat.invite(...)邀请了某个人加入,那么我的代码必须在invitationReceived()方法中工作,该方法已经通过mMUCManager.addInvitationListener(...)添加。 - Mahdi Moqadasi

0
如果您想读取变量的值,例如配置文件中房间的标题名称。
Form form = chat.getConfigurationForm();
String value =  form.getField("muc#roomconfig_roomname").getValues().next();

然后你可以对这个值做任何想做的事情。


0

获取muc#roomconfig_romname的值在XEP-45 6.4中有所描述。Smack提供了MultiUserChat.getRoomInfo()方法来执行查询。

RoomInfo roomInfo = MultiUserChat.getRoomInfo(connection, "roomname@somehost.com")
String roomDescription = roomInfo.getDescription()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接