我正在尝试使用 smackx api 实现 MultiUserChat。
到目前为止,我设法创建了一个新的 MultiUserChat 房间,加入它并发送邀请。我现在的问题是如果有人加入或离开聊天室,如何找出谁在聊天室。我认为在聊天室中添加一个在场监听器可能会奏效:
muc.addParticipantListener(new PacketListener() {
@Override
public void processPacket(Packet packet) {
System.out.println("user count changed, now:" + muc.getOccupcantsCount());
}
});
addParticipantListener
状态的 Javadoc
添加一个数据包侦听器,将通知发送到群聊的任何新 Presence 数据包。使用侦听器是一种合适的方式来了解何时应重新加载由于任何更改而应重新加载的居住者列表。
所以我认为这会起作用。但是,在processPacket
方法内muc.getOccupantsCount()
以及两者都在调用muc.getOccupants()
之前返回值。processPacket
因此,如果聊天室中只有一个用户而另一个用户加入,则输出将是
用户数已更改,现在:1
如果有两个用户和另一个联接,则输出为
用户数已更改,现在:2
如果有 3 个用户和 1 个离开,则输出为
用户数已更改,现在:3
分别,muc.getOccupants()
不会给我调用时刚刚加入的用户,processPacket
仍然给我刚刚离开的用户。
如何从内部有效地找出当前在聊天室的人processPacket
?