在多用户聊天 ( XEP-0045-1.21 ) 中
使用Smack 4.3.0我试图确定一个房间是否已经创建,但我不确定我在做什么是正确的方法. 我已经搜索过它,最相关的答案是MUC 存在吗?.
从技术上讲:
- 在 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;
}
where manager
is MultiUserChatManager manager
and serviceDomain
is just a String
.
所以,问题是:这是正确的方法吗?可以改进吗?