【发布时间】:2016-09-22 17:36:22
【问题描述】:
我可以创建和加入 MUC 房间。但是用户从 Openfire 服务器断开连接,他从服务器端的组中删除。我怎么能像 Whatsapp 做的那样,即即使用户离线,他仍然是 MUC 房间的一部分(配置为在服务器端持久化)并且会接收来自其他占用者的消息。
【问题讨论】:
标签: android chat openfire smack whatsapp
我可以创建和加入 MUC 房间。但是用户从 Openfire 服务器断开连接,他从服务器端的组中删除。我怎么能像 Whatsapp 做的那样,即即使用户离线,他仍然是 MUC 房间的一部分(配置为在服务器端持久化)并且会接收来自其他占用者的消息。
【问题讨论】:
标签: android chat openfire smack whatsapp
邀请用户时,您必须授予他会员资格:
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
(别忘了投票!)
【讨论】: