我正在尝试使用smackx api实现多用户聊天(MultiUserChat)。
到目前为止,我已经成功创建了一个新的聊天室、加入了聊天室并发送了邀请。但是我的问题是,如果有人加入或离开聊天室,我该如何找出谁在聊天室里。我认为可以将一个存在监听器(presence listener)添加到聊天室中来解决这个问题。
到目前为止,我已经成功创建了一个新的聊天室、加入了聊天室并发送了邀请。但是我的问题是,如果有人加入或离开聊天室,我该如何找出谁在聊天室里。我认为可以将一个存在监听器(presence listener)添加到聊天室中来解决这个问题。
muc.addParticipantListener(new PacketListener() {
@Override
public void processPacket(Packet packet) {
System.out.println("user count changed, now:" + muc.getOccupcantsCount());
}
});
addParticipantListener的Javadoc描述如下:
添加一个数据包监听器,该监听器将在发送到群聊的任何新出席报文时得到通知。使用侦听器是一种适当的方式,可以了解由于任何更改而应重新加载占用者列表的时间。
所以我认为这会起作用。但是,在processPacket方法内部,muc.getOccupantsCount()以及muc.getOccupants()都返回processPacket调用之前的值。 因此,如果聊天室中只有一个用户并且另一个用户加入,输出将为:
用户计数已更改,现在:1
如果有两个用户并且另一个用户加入,则输出为:
用户计数已更改,现在:2
如果有三个用户并且其中一个离开,则输出为:
用户计数已更改,现在:3
同样,当在processPacket内部调用时,muc.getOccupants()不会给我刚刚加入的用户,并仍然给我刚刚离开的用户。
如何有效地从processPacket方法内部找出当前谁在聊天室中?