【问题标题】:How to join chatoom room automatically using smack如何使用 smack 自动加入聊天室
【发布时间】: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

【问题讨论】:

    标签: xmpp openfire smack


    【解决方案1】:

    当某个用户希望其他用户加入聊天室时,该用户可以向其他用户发送加入该聊天室的邀请。进程在section 7.8 of XEP-0045: Multi-User Chat中指定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      相关资源
      最近更新 更多