Изменить раздел "Исходящее присутствие" в 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 говорят:
Регистрирует перехватчик пакетов в этом соединении. Перехватчик будет вызываться каждый раз, когда это соединение собирается отправить пакет. Перехватчики могут изменять пакет для отправки. Фильтр пакетов определяет, какие пакеты будут доставлены перехватчику.