XMPP получает сообщения, отправленные на другой ресурс - PullRequest
2 голосов
/ 19 февраля 2011

Как получить сообщения чата XMPP, отправленные на другой ресурс?

Например, мой прослушиватель сообщений получает сообщения до тех пор, пока на это сообщение не будет получен ответ от другого ресурса (например, Gmail Google Talk *).1004 *).С этого момента сообщения отправляются этому клиентскому ресурсу, а не моему слушателю.

Я использую библиотеку Smack для Java (ну, на самом деле asmack , котораяэто порт для Android)

После подключения к сервису (серверу Google Talk) я добавляю прослушиватель следующим образом:

    connection.addPacketListener(new PacketListener() {

        public void processPacket(Packet packet) {
            Log.i(TAG, "processPacket: chat");

            Message message = (Message) packet;

            Log.d(TAG, "Message: " + message.toXML());

            if (message.getBody() != null) {
                String fromName = StringUtils.parseBareAddress(message.getFrom());
                Log.i(TAG, "Got text [" +
                           message.getBody() +
                           "] from [" +
                           fromName +
                           "]");
            }
        }
    }, filter);

Сначала все работает нормально, я получаю сообщения от Google Talk,Эти сообщения фактически отправляются нескольким клиентам, моему рабочему столу Google Talk, приложению Google Talk для Android и моей реализации.

Но когда я отвечаю на сообщение, скажем, в приложении для настольного компьютера, все последующие сообщения отправляютсяк ресурсу настольного приложения, и я ничего не получил в своей реализации.

Так что я не уверен, как также получать эти сообщения.Приложение Google Talk, кажется, делает это.Оно не отображается как новое сообщение, как оно изначально (до того, как на него ответили), но оно обновляется в ветке приложения Google Talk.

Любая помощь будет отличной!

Ответы [ 2 ]

3 голосов
/ 19 февраля 2011

Если я вас правильно понял, вы вошли в систему с одним и тем же пользователем в разных приложениях (ресурсах).Вы получаете сообщения от контактов в своем списке, но когда вы отвечаете из одного места, он создает диалог только между этими двумя узлами?

Это зависит от реализации.Большинство клиентов следуют рекомендованному поведению в RFC 3921 , который должен отвечать на полный JID (user @ domain / resource), если полученное сообщение было от полного JID.Вы можете ответить, используя свой из в качестве своего голого JID (user @ domain), так что будущий последовательный ответ будет отправлен на ваш голый JID, что приведет ко всем доступным ресурсам (при условии, что приоритет равен) его получение.

Из вашего примера, когда вы отвечаете из настольного приложения, вполне вероятно, что приложение устанавливает заголовок «От» для полного JID, а другая сторона, которая получает ответ из вашего настольного приложениязатем использует это значение в качестве заголовка «To» для своего ответа.Это, конечно, означает, что только уникальный ресурс будет получать сообщения.

Так что он не имеет никакого отношения к вашему коду.Это связано с кодом в этом настольном приложении, работающем в сочетании с кодом в другой конечной точке (собеседник), который исключает вашу реализацию из цикла.

0 голосов
/ 20 апреля 2014

Я думаю, вам следует поискать параметры приоритета для этой проблемы в xmpp. есть настройки приоритета, которые необходимо установить, чтобы получать сообщения через разные ресурсы!

при множественном соединении вам необходимо контролировать поток сообщений и, следовательно, устанавливать приоритеты: Вот основные правила для приоритетов: Ресурс с самым высоким приоритетом в любой момент времени будет тем, который принимает входящие сообщения. Если два или более ресурса имеют одинаковый приоритет, все ресурсы с указанным приоритетом будут получать входящие сообщения. Если все подключенные ресурсы имеют отрицательный приоритет, входящие сообщения будут помещены в очередь на стороне сервера, пока один из ресурсов не сбросит приоритет на положительный.

Источник: http://blog.roobix.net/2010/02/jabber-xmpp-resources-and-priorities.html

...