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을 알 후크 set_presence_hook 및 unset_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이 두 번 트리거되는 이유는 무엇입니까? – nhenrique

+0

@ nuno-freitas 후크가 아닌가요? ** user_available_hook **는 바로 연결됩니까? –