2012-02-22 8 views
0
私はXMPPサーバー(のpython + xmppy)に接続するために、次のコードを使用してい

Jabberボット - プレゼンスの更新を取得する方法は?

c = xmpp.Client("localhost", debug=[]) 
    c.connect(("127.0.0.1", 5222)) 
    c.auth("test","test") 
    c.sendInitPresence() 
    c.send(xmpp.Presence(to="[email protected]", typ='subscribe')) 
    time.sleep(1000) 

これはうまく動作しますが、管理ユーザーGETはプレゼンス更新だと連絡先に「テスト」のユーザは、次のように示されていますオンライン。この問題は、このスクリプトでCtrl + Cを押すと(最後に眠っているとき)、終了します。問題は、管理者ユーザーがそのスクリプトからプレゼンス更新を取得しないことです。

管理者ユーザーが自動的に購読要求を受け入れるようにする必要があります。

私の質問は、管理ユーザーがテストユーザーがオフラインになったことをどのように検出できるかです。誰もがこれを書いて、私のxmppサーバにプログラムを置くことができるので、上記のスクリプトを変更することは選択肢ではありません。

管理者がプレゼンスアップデートを受信しない理由や、ユーザーの「テスト」がオフラインになったことを検出する方法については、歓迎します。エンドポイントは、特定のプレゼンス更新せずにオフラインになったことを検出

おかげ

答えて

1

は、通常、例えばによって、サーバーによって処理されます。エンドポイントが通信しているソケットが閉じられていることを検出します。

クライアントコードを制御できる場合は、管理クライアントから購読しているすべてのエンドポイントに時折presence probesを送信することができます。

+0

こんにちは。私はopenfireであるXMPPサーバーを制御しており、上記のスクリプトを使用すると現在の更新を送信しません。そして、ユーザーがオフラインになったことを検出します。これは、すべてのユーザーをリストすると、「テスト」ユーザーがオフラインとしてマークされているためです。プレゼンスの更新はありません。私は上記のスクリプトが 'テスト'の名簿にそれを追加しているので、管理者はプレゼンスアップデートを受け取るべきだと思っています。そして、管理者は自動的にサブスクリプションを受け入れます。だから私は何が起こっているのかわからない 'admin'はオフラインプレゼンスの更新を取得しないが、openfireはユーザー 'テスト'がオフラインになったことを検出します。 – eleanor

+1

それはOpenfireのバグかもしれないように聞こえます。 XMPP仕様では、クライアントの接続が切断された場合、サーバーは利用不可能なプレゼンスを生成する必要があります。http://xmpp.org/rfcs/rfc6121.html#presence-unavailable-outbound – MattJ

関連する問題