【发布时间】:2021-10-11 13:15:27
【问题描述】:
使用 smack 创建连接(usera),然后通过获取聊天室列表加入聊天室。但在此之后,如果另一个用户 (userb) 将 usera 添加到新的聊天室。但是如何自动加入新创建的聊天室?
以下是获取聊天室列表和加入聊天室的代码。但在列表中,我得到了所有公共聊天室。如何获取 usera 是参与者/成员的聊天室列表?
List<DomainBareJid> mucServiceDomains = connection.mucManager.getMucServiceDomains();
//get list of chatrooms
for (DomainBareJid domainBareJid : mucServiceDomains) {
List<HostedRoom> hostedRooms = connection.mucManager.getHostedRooms(domainBareJid);
for (HostedRoom hostedRoom : hostedRooms) {
Log.info("hostedRooms::: jid{} name{}",hostedRoom.getJid(),hostedRoom.getName());
try {
connection.joinRoom(hostedRoom.getJid().toString(), connection.getUserJid().toString());
} catch (Exception e) {
Log.error("Error joinign muc::{}",e);
}
}
}
// joinroom by room name
public boolean joinRoom(String mGroupChatName, String mNickName) {
Log.debug("joinRoom " + mGroupChatName + " " + mNickName);
if(mGroupChatName!=null) {
try {
MultiUserChat mMultiUserChat = groupchats.get(mGroupChatName);
if (mMultiUserChat == null)
{
mMultiUserChat = mucManager.getMultiUserChat(JidCreate.entityBareFrom(mGroupChatName));
mMultiUserChat.addInvitationRejectionListener(this);
groupchats.put(mGroupChatName, mMultiUserChat);
}
DiscussionHistory history = new DiscussionHistory();
history.setMaxStanzas(0);
mMultiUserChat.join(Resourcepart.from(mNickName),null,history,SmackConfiguration.getDefaultPacketReplyTimeout());
mMultiUserChat.addMessageListener(new MessageListener() {
@Override
public void processMessage(Message message) {
Log.info("MUC message recieved is::{}",message.getBody());
}
});
return true;
} catch (Exception e) {
Log.error("joinRoom", e);
}
}
return false;
}
Smack 版本:4.2.1
【问题讨论】: