1

AbstractComponentクラスを拡張することにより、Whackライブラリに基づいて外部のopenfireコンポーネントを構築しました。クライアントが自分のコンポーネントをサブスクライブし、コンポーネントがオンラインおよびオフラインになったときにプレゼンス通知を受信するようにしたい。だから私の質問は、AbstractComponentに基づいて外部コンポーネントのプレゼンスとプレゼンスサブスクリプションをどのように処理できるかということです。

現在、handlePresence()メソッドを使用してプレゼンス要求に応答できますが、クライアントをコンポーネント名簿に追加するにはどうすればよいですか(外部コンポーネントはそもそも名簿を許可しますか)?

@Override
protected void handlePresence(Presence presence){
    if (presence.getType() ==  Presence.Type.subscribe){
        System.out.println("The component has received Subscribtion request.");
        Presence original =  presence;
        Presence response = new Presence();
        //Swap the sender/recipient fields
        response.setTo(original.getFrom());
        response.setFrom(original.getTo());
        //Convert the text to upper case
        response.setType(Presence.Type.subscribed);
        send(response);

    }
}
4

1 に答える 1

2

コンポーネントには、サーバーによって提供される名簿がありません。必要に応じて、独自の名簿をデータベースに保存できます。一部のアプリケーションは、名簿なしで逃げることができます(単にすべての人にオンラインで表示したい場合)。

すべての人にオンラインで表示するには(最も簡単なアプローチ、名簿の保管は必要ありません):

  • <presence type="subscribe"/>で返信を受け取ったとき<presence type="subscribed"/>
  • (または表示したいステータス)<presence type="probe"/>で返信を受け取ったとき<presence/>

名簿を保存するにはもう少し作業が必要ですが、誰があなたのプレゼンスを表示することを許可されているか、そして誰のプレゼンスを表示することを許可されているかを追跡できます。自分の名簿を管理したくない場合は、ここで通常のクライアント接続を使用することをお勧めします。Jack Moffittは、このアイデアに関するブログ投稿をここに書きました:http: //metajack.im/2008/08/04/thoughts-on-scalable-xmpp-bots/

この投稿全体を通して、スタンザの「to」および「from」属性を省略していることに注意してください。発信スタンザに「to」と「from」を配置するのはコンポーネント次第です。すべての着信スタンザには、「to」と「from」があります。

コンポーネントのプレゼンスをユーザーに表示する

処理する必要のある基本的な着信スタンザは次のとおりです。

  • <presence type="subscribe">

    • 送信者は、プレゼンスの更新をサブスクライブしたいと考えています。これを承認または拒否することができます。承認する場合は、送信者のJIDをデータベースに保存して、必要に応じてプレゼンスの更新を送信する必要があることを確認する必要があります。
    • 仕様: http: //xmpp.org/rfcs/rfc6121.html#sub-request-handle
  • <presence type="unsubscribe">

    • 送信者は、あなたからのプレゼンス更新の受信を停止したいと考えています。更新をサブスクライブしているユーザーのリストからそれらを削除してから、を返送する必要が<presence type="unsubscribed">あり<presence type="unavailable">ます。
    • 仕様: http: //xmpp.org/rfcs/rfc6121.html#sub-cancel-inbound(ただし、テキストはここのコンポーネントよりもサーバーに合わせて調整されています)。
  • <presence type="probe">
    • 送信者はあなたの現在のプレゼンスを求めています。そのユーザーの最新のプレゼンススタンザで返信するだけです。これは通常、ユーザーがログインしたときにユーザーのサーバーから送信されます。

コンポーネント内のユーザーのプレゼンスを受信する

さらに、コンポーネントにユーザーの存在を認識させたい場合は、サブスクリプション要求をユーザーに送信する必要があります<presence type="subscribe"><presence type="subscribed">承認( )または拒否()のいずれかを受け取る準備をする必要があります<presence type="unsubscribed">

コンポーネントが最初にオンラインになると、各ユーザーに送信することで、ユーザーの現在のプレゼンスを取得でき<presence type="probe">ます。コンポーネントの実行中に、ユーザーごとにこれを複数回行う必要はありません。ユーザーが上記のようにサブスクリプションリクエストを承認した場合、ユーザーのサーバーはプレゼンスの更新を自動的に送信します。

于 2012-02-25T14:19:23.663 に答える