2011-07-29 20 views
0

私はアーラン/ exmppで書かejabberdとボットを実行します。私はこのボットにいくつかjabberクライアントに接続します。どうすればクライアントの切断を捕まえることができますか?あなたがキャッチによって何を意味Ejabberdキャッチクライアントの接続が切断さ

答えて

2

? デバッグの場合は、ejabberd_sm:close_sessionに?DEBUGを追加します。 ejabberd_c2上でdbgをトレースするには、終了し、同じejabberd_sm:close_sessionをトレースします。 アプリケーションコールの場合、sm_remove_connection_hookを購読してください。 独自のフックを実装し、カスタムフックを使用することがありますか?

+0

クライアントがボットにメッセージを送信し、ボットクライアントにメッセージを送信し、クライアントは、私はこの瞬間をキャッチし、オフラインに行くクライアントJIDを知ることができるか、オフラインに行きますか? – 0xAX

1

私はあなたのことを正しく理解していますが、クライアントがボットに指示されたプレゼンスを送信する権限を持っている場合、ユーザーがオフラインになると、サーバーは切断の通知をボット。

RFC 3921 ここにいくつかのドキュメントがあります。

5.1.4。ダイレクトプレゼンス

ユーザは、その値 他のエンティティのJIDといいえ「タイプ」属性または「タイプのいずれかを持つ属性「」へと別のエンティティ(すなわち、 プレゼンススタンザに向けプレゼンスを送信することができます'属性 の値は「使用不可」です)。三つの可能なケースがあります。

  1. ...
  2. ユーザーは「から」や を持った後に、「両方」のサブスクリプション型と 者の名簿にないエンティティに向けプレゼンスを送信した場合初期の存在を送信し、使用できない存在 ブロードキャストを送信、ユーザーのサーバーMUSTルートの前またはその存在スタンザentityv(...)に の完全なXMLを提供します。しかし、ユーザが有向プレゼンスを送信した利用可能な リソースが利用不可能になった場合、ユーザのサーバは利用不可能な 存在をエンティティにブロードキャストしなければならない(ユーザがまだそのエンティティに存在しない プレゼンスを送信していない場合)。
  3. ...

は、このヘルプを願っています。

0

は、私は、ユーザーがオフラインのスタンザを送信するときに、ユーザーがチェックするのではなく、C2S接続が閉じられたときにチェックしようとしていると思いますが、あなたが編集して、この目的のためにejabberd_c2s.erlをカスタマイズすることができます。 ejabber_c2sの中では、disconnectを扱う関数は/ 3(行番号1425)で終了し、クライアントのjabber idを簡単に見つけることができます。

関連する問題