像whatsapp Android一样创建MUC组

时间:2016-05-25 08:26:32

标签: android chat openfire smack whatsapp

我可以创建和加入MUC房间。但是用户断开与Openfire服务器的连接,他将从服务器端的组中删除。我怎么能像Whatsapp那样做,即使用户下线,他仍然是MUC房间的一部分(配置为在服务器端持久)并且将接收来自其他占用者的消息。

1 个答案:

答案 0 :(得分:1)

邀请用户时,您必须授予他成员资格:

MultiUserChat muc = multiUserChatManager.getMultiUserChat("foo@conference.myserver");

muc.invite("jhondoe@myserver","Join this groupchat!");

然后你可以授予他声音,你必须根据自己的喜好/需要授予会员资格(或所有权或审核):

muc.grantVoice("jhondoe@myserver");
muc.grantMembership("jhondoe@myserver");

最后你必须将这样的列表与你的客户集成:

public List<String> retriveAllAffialiateOfMuc(MultiUserChat muc) throws NoResponseException, XMPPErrorException, NotConnectedException
    {
        List<Affiliate> affiliatesMembers = new ArrayList<Affiliate>();
        if (muc.getAdmins() != null)
        {
            affiliatesMembers.addAll( muc.getAdmins() );
        }

        if ( muc.getMembers() != null)
        {
            affiliatesMembers.addAll( muc.getMembers() );
        }

        if ( muc.getOwners() != null )
        {
            affiliatesMembers.addAll( muc.getOwners() );
        }

        if (affiliatesMembers.size() == 0)
        {
            System.out.println("Error: looking for a non existant room");
            return  new ArrayList<String>(0);
        }

        List<String> affiliateMembersNames = new ArrayList<String>(affiliatesMembers.size());

        for (Affiliate affiliate : affiliatesMembers)
        {
            affiliateMembersNames.add(affiliate.getJid().toString());
        }
        return affiliateMembersNames;
    }

因此,您将拥有与该房间相关联的所有用户的列表。 您可以在某些回调中使用此列表来制作“所有成员”列表,例如WhatsApp。

请看这个页面的结尾: https://www.igniterealtime.org/builds/smack/dailybuilds/documentation/extensions/muc.html

(别忘了投票!)