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