2011-12-05 9 views
3

ejabberdコードを変更せずに、ユーザがログインしてカスタムモジュールのejabberdセッションからログアウトしたことを知りたい。ログイン/ログアウトを傍受するejabberd

私は、ユーザーがログインして、ユーザーがログアウトしたときに行った操作をクリーンアップするときに、いくつかのアクションを実行する必要があるので、その必要があります。また、いくつかの状況でユーザーをログオフする必要があります。

だから、いくつかのモジュールを拡張してそれらの機能を利用する方法はありますか?私はまだそれで私を助けることができるいくつかのドキュメントを探しています。

+0

使用ejabberdフック、http://www.process-one.net/en/wiki/ejabberd_events_and_hooksのようなものになってしまいますロングストーリーショート/。あなたはuser_available_hook、set_presence_hook、unset_presence_hookが必要です – 0xAX

+1

'user_available_hook'とは何ですか?私は、set_presenceとunset_presenceを使用して、ユーザーがログインまたはログアウトしたときにイベントを取得できることを知っています。このuser_availableはどうですか? – RobisonSantos

答えて

9

あなた自身のコードを書くことができ、ejabberdが提供する動作gen_modを持つプラグインをビルドすることができます。 ここから始めるのがいい場所はblog/tutorialで、next partに従ってください。 これで十分ですが、同じブログでさらに多くの情報を見つけることができます。

独自のモジュールを構築すると、もう少し快適に取得した後、私はあなただけで、set_presence_hookが存在が設定されるたびに活性化されることがありません気付い

unset_presence_hookフックset_presence_hookを見てみましょう示唆あなたができるならば、ログインするだけで、それを回避しなければなりません。

-module(mod_your_mod). 

-behavior(gen_mod). 
-include("ejabberd.hrl"). 

-export([start/2, stop/1, on_set/4, on_unset/4]). 

start(Host, _Opts) -> 
    ejabberd_hooks:add(set_presence_hook, Host, ?MODULE, on_set, 50), 
    ejabberd_hooks:add(unset_presence_hook, Host, ?MODULE, on_unset, 50), 
    ok. 

stop(Host) -> 
    ejabberd_hooks:delete(set_presence_hook, Host, ?MODULE, on_set, 50), 
    ejabberd_hooks:delete(unset_presence_hook, Host, ?MODULE, on_unset, 50), 
    ok. 

on_set(User, Server, _Resource, _Packet) -> 
<presence code>  

on_unset(User, Server, _Resource, _Packet) -> 
<offline code> 

・ホープ、このヘルプ

+0

ありがとう、これは私のために働いた。 – RobisonSantos

+0

set_presence_hookが2回トリガーされる理由は何ですか? – nhenrique

+0

@ nuno-freitasフックではありませんか?** user_available_hook **は右フックですか? –