Я пытаюсь реализовать MultiUserChat с smackx api.Как узнать комнату в помещении, когда кто-то присоединился или оставил MultiUserChat в smackx?
До сих пор мне удалось создать новую комнату MultiUserChat, присоединиться к ней и отправить приглашения. Моя проблема на данный момент заключается в том, как узнать, кто в чате, если кто-то присоединился к чату или оставил его. Я думал, что добавление присутствия слушателя в комнату чата может сделать трюк:
muc.addParticipantListener(new PacketListener() {
@Override
public void processPacket(Packet packet) {
System.out.println("user count changed, now:" + muc.getOccupcantsCount());
}
});
Javadoc для addParticipantListener
состояний
Добавляет пакет слушатель, который будет уведомлен о каких-либо новых пакетах Presence направляемых на Групповой чат. Использование прослушивателя - это подходящий способ узнать, когда список пассажиров должен быть перезагружен из-за каких-либо изменений.
Так что я думал, что это сработает. Однако в рамках метода processPacket
muc.getOccupantsCount()
, а также muc.getOccupants()
оба значения возвращаются перед вызовом processPacket
. Так что, если есть только один пользователь в чате, а другие присоединяется, выход будет
пользователя COUNT изменился, теперь: 1
Если два пользователя, а другие присоединяются, выход является
пользователь COUNT изменился, теперь: 2
и если есть три пользователя и один листья, то из пут
Количество пользователей изменилось, теперь: 3
Соответственно, muc.getOccupants()
не даст мне пользователю, который только что присоединился, когда вызывается в processPacket
, и до сих пор дает мне пользователю, что только что вышел.
Как я могу эффективно узнать, кто в данный момент находится в чате, в пределах processPacket
?
У меня проблема, как добавить добавление приглашения для приглашения без наличия комнаты (как мы можем инициализировать MultiuserChat, если у вас нет имени комнаты?) –