【发布时间】:2018-09-12 15:19:54
【问题描述】:
在多用户聊天 (XEP-0045-1.21) 中使用 Smack 4.3.0 我正在尝试确定是否已经创建了一个房间,但我不确定我正在做的是否是正确的方法。
我已经搜索过了,最相关的答案是 does MUC exist?。
从技术上讲:
- 在 OpenFire 4.2.0 中,房间默认创建为公共和会员专用。
- 所有房间的名称都是由哈希字符串中的成员名称定义的 id,即
XXXXXX029d8c36b62259d0eXXXXXXXX。这意味着用户 A 可以与 B、C 创建一个房间并像前一个一样获得groupId,但随后用户 B(在另一台设备中)可以尝试创建同一个房间(与用户 A、B、C),这将给他同样的groupId。 - 存在类似whatsapp 的架构层,因此用户可以留下
Group Chat并随时重新加入。
此刻我在做什么:
@WorkerThread
public boolean isGroupChatAlreadyCreated(@NonNull final String groupId)
throws
XmppStringprepException,
XMPPException.XMPPErrorException,
MultiUserChatException.NotAMucServiceException,
SmackException.NotConnectedException,
InterruptedException,
SmackException.NoResponseException {
List<HostedRoom> hostedRooms = manager.getHostedRooms(JidCreate.domainBareFrom(serviceDomain));
for (HostedRoom hostedRoom : hostedRooms) {
if (hostedRoom.getName().equalsIgnoreCase(groupId)) {
return true;
}
}
return false;
}
其中manager 是MultiUserChatManager manager 而serviceDomain 只是String。
所以,问题:这是正确的方法吗?可以改进吗?
【问题讨论】:
标签: xmpp smack multiuserchat