Изменить раздел "Исходящее присутствие" в XMPP-клиенте

Я использую Smack API для Java для подключения к серверам ejabberd и gtalk. Я могу подключиться и войти в систему нормально, но я хочу сделать 1 незначительную модификацию.

Как я могу изменить раздел присутствия вошедшего в систему пользователя?

Например, учитывая строфу:

<presence to="someone@someServer.com/androidd5a3arer3"
      from="me@someServer.com/Smack">
  <status></status>
  <priority>24</priority>
  <show>away</show>
  <c xmlns="http://jabber.org/protocol/caps"></c>
  <x xmlns="vcard-temp:x:update">
    <photo>asefe3a33e</photo>
  </x>
</presence>

Я хотел бы добавить новое поле, например, перед отправкой пакета кому-то еще:

<presence to="someone@someServer.com/androidd5a3arer3"
      from="me@someServer.com/Smack">
  <status></status>
  <priority>24</priority>
  <show>away</show>
  <c xmlns="http://jabber.org/protocol/caps"></c>
  <x xmlns="vcard-temp:x:update">
    <photo>asefe3a33e</photo>
  </x>
<NEW_FIELD> NEW STUFF HERE </NEW_FIELD>
</presence>

Любая помощь будет оценена.

1 ответ

Решение

Вызовите addPacketInterceptor для вашего XMPPConnection:

connection.addPacketInterceptor(new PacketInterceptor() {
        public void interceptPacket(Packet packet) {
            // modify packet
        }
    }, new PacketTypeFilter(Presence.class));

Документы для addPacketInterceptor говорят:

Регистрирует перехватчик пакетов в этом соединении. Перехватчик будет вызываться каждый раз, когда это соединение собирается отправить пакет. Перехватчики могут изменять пакет для отправки. Фильтр пакетов определяет, какие пакеты будут доставлены перехватчику.

Другие вопросы по тегам