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
グループ チャットに新しいプレゼンス パケットが送信されると通知されるパケット リスナーを追加します。リスナの使用は、変更によって占有者のリストをいつ再ロードする必要があるかを知るための適切な方法です。
だから、これはうまくいくだろうと思った。ただし、processPacket
メソッド内でmuc.getOccupantsCount()
もmuc.getOccupants()
両方とも、呼び出しの前に値を返しprocessPacket
ます。したがって、チャット ルームに 1 人のユーザーしかいない場合、別のユーザーが参加すると、出力は次のようになります。
ユーザー数が変更されました。現在: 1
2 人のユーザーがいて、別のユーザーが参加している場合、出力は次のようになります。
ユーザー数が変更されました。現在: 2
3 人のユーザーと 1 人のユーザーがいる場合、出力は次のようになります。
ユーザー数が変更されました。現在: 3
それぞれ、muc.getOccupants()
内で呼び出されたときに参加したばかりのユーザーは表示さprocessPacket
れませんが、離れたばかりのユーザーは表示されます。
現在チャット ルームにいる人を 内から効果的に見つけるにはどうすればよいprocessPacket
ですか?