Working with Smack 4.3.0 in a Multi User Chat (XEP-0045-1.21) I'm trying to find out if a room is already created or not, but I'm not sure if what I'm doing is the correct way.
I have search for it and the most relative answer to it was does MUC exist?.
Technically speaking:
XXXXXX029d8c36b62259d0eXXXXXXXX
. This means that user A can create a room with B, C and get a groupId
like the previous one, but then user B (in another device) can try to create same room (with users A,B,C), which is going to give him same groupId
.Group Chat
and rejoin whenever they want.
What I'm doing at this moment:
@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
.
so, the questions: is this right way to do it? can it be improved?
I believe the easier way is get some info about room, for example its configuration form. If nothing will be returned then it means room does not exist:
public boolean isGroupChatAlreadyCreated(@NonNull final EntityBareJid groupId)
throws
XMPPErrorException,
NotConnectedException,
InterruptedException,
NoResponseException {
MultiUserChat multiUserChat = MultiUserChatManager.getInstanceFor(connection).getMultiUserChat(groupId);
return multiUserChat.getConfigurationForm() != null;
}
More info here https://github.com/igniterealtime/Smack/blob/4.3/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MultiUserChat.java#L809