2011-01-05 1 views
4

XMPPサーバー(OpenFire)とJava Smack XMPPスタックに基づくカスタムクライアントがあります。私たちは手動購読受け入れを利用しているため、クライアントは購読予約と購読予約を交換する必要があります。XMPP:元のリクエスタがオフライン(登録済みのプレゼンス)のときに相互サブスクリプションを確立するRFC

RFCに記載されているように、サブスクライブプレゼンス(「私はあなたのプレゼンスに登録したい」)はサーバーによって保存され、ユーザーがログインするたびに再ログインします。残念ながら、同じことは答え( "購読"または "購読中止")には当てはまりません。元のリクエスタがオフラインの場合、他のユーザーがサブスクリプションリクエストに応答すると、そのユーザーはその回答を受信しません。私はXMPP RFCでサーバの予想される動作について何も見つけることができませんでした。

どうすればよいですか?私が逃したかもしれないものがありますか?あるいは、このユースケースを実装するための標準的な方法はありますか?

This OpenFire forum postすべてのポインタについて

おかげで、 フロリアン

+1

[OK]を1つの可能な解決策(私が使用した1つ)は、接続のRosterをチェックして、その時点ですべての一方向サブスクリプションを自動的に修復します。 –

+0

あなたのソリューションは私を助けました。ありがとうございました。 –

答えて

0

だからアリスボブスプレゼンス情報をサブスクライブしたいと送る...私が経験してる行動が必要な1であることを示唆していますサブスクリプションリクエスト。サーバーはボブに、と答えてまたはなしと応答するまで、通知を送信します。あなたの問題は今、サーバがアリス(彼女がオフラインの場合)には通知せず、ボブはリクエストに応じて反応します。だからアリスボブズちょうど良い答えを得るでしょう。

ボブは、プレゼンス情報を交換することに同意した場合、アリスは彼女の名簿上でこれを気づくでしょう - 彼女は(アイドル離れ、...)ボブ存在が表示されます。そうでない場合、依頼が依然として保留中であるか、Bobが彼女の要求を拒否した場合、彼女は知らないでしょう。

この動作を変更するには、カスタムモジュールを実装してOpenfireサーバーに追加することができます。 OpenfireにはこのためのAPIがあります。

このモジュールは確認メッセージに反応し、すべての保留中または最近確認されたサブスクリプションメッセージのステータスメッセージを(ログオンごとに)サブスクライバに送信できます。クライアントコードはこれらのメッセージを処理し、この状態を加入者に適切な方法で提示することができます。

1

あなたは、サブスクリプションの状態を判断するためのあなたの処分で二つの手段があります。

  1. は要求しているユーザーの名簿を確認してください。リストにサブスクリプション属性が「to」または「both」である問題のエンティティの項目が含まれている場合は、購読しています。
  2. 2番目のオプションは、別の購読パケットをサーバーに送信することです。プレゼンス要求をすでに受け入れている場合は、他のユーザーに代わって加入したサーバーですぐに応答する必要があります。
関連する問題