OpenFireの外部コンポーネントがプレゼンスとサブスクリプションにどのように対処できるか?
質問
抽象コンポーネントクラスを拡張することで、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);
}
}
. 解決
コンポーネントはサーバーによって提供されていない名簿はありません。必要な場合は、自分の名簿をデータベースに保存できます。いくつかのアプリケーションはすべての名簿で逃げることができます(彼らが単に彼らが単にオンラインに見えたときに)。
全員にオンラインに表示される(最も簡単なアプローチ、名簿の保管は必要ありません):
-
<presence type="subscribe"/>
で<presence type="subscribed"/>
返信を受け取ったとき -
<presence type="probe"/>
(または表示されるステータスがどのようなものとして)に登録している場合は -
名簿を保管するにはもう少し作業が必要ですが、誰があなたの存在感を見て、あなたが見ることを承認されているかを承認されている人を追跡することができます。ご自身の名簿を管理したくない場合は、ここで通常のクライアント接続を使用することをお勧めします。 Jack Moffittはここでブログ投稿をここに書きました: http:/ / metajack.im/2008/08/04/thoughts-on-scalable-xmpp-bots/
この投稿を通して、スタンザの「to」と 'からの'属性を省略します。発信スタンザに「宛先」と「から」を入力するのはコンポーネント次第です。すべての入ってくるスタンザは「から」と「FROM」を持つでしょう。
ユーザーにコンポーネントのプレゼンスを表示する
扱う必要がある基本的な入ってくるスタンザは次のとおりです。
-
<presence/>
- 送信者はあなたのプレゼンスの更新を購読したいです。あなたはこれを承認または拒否することができます。承認した場合は、データベースに送信者のJIDを保存する必要があるため、必要に応じてプレゼンスの更新を送信する必要があることがわかります。
- 仕様:> http://xmp.org/rfcs/rfc6121.html#サブリクエストハンドル
-
<presence type="subscribe">
- 送信者はあなたからプレゼンス更新の受信を止めたいと考えています。あなたはあなたの更新を購読している人々のリストからそれらを削除してから、
<presence type="unsubscribe">
と<presence type="unsubscribed">
を送り返します。 - 仕様: http://xmpp.org/rfcs/rfc6121.html#サブキャンセルinbound (テキストはここではコンポーネントよりもサーバーに向かって調整されています)。
-
<presence type="unavailable">
.- 送信者はあなたの現在の存在を求めています。そのユーザーのための最新のプレゼンススタンザに単に返信してください。これは通常ログインしたときにユーザーのサーバーによって送信されます。
コンポーネント内のユーザーの存在を受け取る
さらに、コンポーネントにユーザーの存在を知るようにしたい場合は、それらにサブスクリプション要求を送信する必要があります.
<presence type="probe">
。承認(<presence type="subscribe">
)または拒否(<presence type="subscribed">
)を受信するように準備する必要があります。最初にコンポーネントがオンラインになったら、
<presence type="unsubscribed">
を各ユーザーに送信することで、ユーザーの現在のプレゼンスを取得できます。コンポーネントの実行中にユーザーごとに複数回以上実行する必要はありません。ユーザーが上記のように購読要求を承認した場合、ユーザーのサーバーは自動的にプレゼンス更新を送信します。
- 送信者はあなたの現在の存在を求めています。そのユーザーのための最新のプレゼンススタンザに単に返信してください。これは通常ログインしたときにユーザーのサーバーによって送信されます。
- 送信者はあなたからプレゼンス更新の受信を止めたいと考えています。あなたはあなたの更新を購読している人々のリストからそれらを削除してから、
-