MultiUserChat приглашения в Smack - PullRequest
4 голосов
/ 05 декабря 2011

У меня есть следующий код для прослушивания приглашений в чат-комнату:

    Connection.DEBUG_ENABLED = true;
    XMPPConnection connection = new XMPPConnection("jabber.org");
    connection.connect();
    connection.login("username", "password");

    MultiUserChat.addInvitationListener(connection, new InvitationListener() {
        @Override
        public void invitationReceived(Connection arg0, String arg1,
                String arg2, String arg3, String arg4, Message arg5) {
            System.out.println("Invitation Received!");
        }
    });

    System.out.println("Connected, waiting for invitation");
    while(true) {
        Thread.yield();
    }
}

Затем я использую другую учетную запись, чтобы войти в систему с помощью pidgin, создать чат-комнату и пригласить вышеуказанного пользователя.Метод приглашения и получения не вызывается.Отладчик smack получает обновление информации о присутствии при входе в систему, но никаких других пакетов.Однако, если я вошел в систему вышеупомянутым пользователем с помощью pidgin, я получаю приглашение.Как я могу заставить smack обнаружить запрос на приглашение?

Ответы [ 2 ]

2 голосов
/ 11 октября 2014

Возможно, я опоздал, чтобы ответить на этот вопрос, но я хотел бы поделиться своим решением здесь, у меня была та же проблема,

Прежде всего, все зависит от того, какую версию smack вы используете (я рекомендовал последнюю версию)

Во-вторых, пользователь, отправляющий приглашение MUC, и пользователь, получающий приглашение, должны быть подключены к одному серверу для получения приглашения MUC.

В-третьих, всегда включайте отладчик smack, он будет предоставлять информацию о входящих и исходящих строфах.

Четвертый фактор, который следует учитывать, - это отправлять информацию о присутствии на сервер XMPP после входа в систему, как показано ниже,

       connection.setStatus(true,"ONLINE");

public void setStatus(boolean available, String status) throws XMPPException {
        Presence.Type type = available? Type.available: Type.unavailable;
        Presence presence = new Presence(type);
        presence.setStatus(status);
        connection.sendPacket(presence);
    } 

отправка присутствия информирует сервер xmpp о статусе пользователя, а затем информация о присутствии, а также новое приглашение будут получены, если вы включили прослушиватель на объекте соединения, это работает для меня, надеюсь, оно будет работать и для вас, пожалуйста, исправьте меня, если есть информация неправильно.

0 голосов
/ 11 января 2012

Возможно, вы используете неправильное имя пользователя из pidgin.Вы должны использовать имя, за которым следует адрес электронной почты.

...