1

Smack API for 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>

どんな助けでもいただければ幸いです。

4

1 に答える 1

3

XMPPConnectionでaddPacketInterceptorを呼び出します。

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

addPacketInterceptorのドキュメントには次のように書かれています。

この接続にパケットインターセプターを登録します。インターセプターは、この接続によってパケットが送信されようとするたびに呼び出されます。インターセプターは、送信するパケットを変更する場合があります。パケットフィルタは、どのパケットがインターセプタに配信されるかを決定します。

于 2011-06-14T04:30:35.000 に答える