最近两天 看了一下 ejabberd的用法,关于http request handler 在process-one.net上说的很清楚,很件的就实现一个Demo.
对于gen_mod 只写个start/2 stop/1 也很简单。但想做点事情对我来说有点难度了。
带着疑问开始探索了,有人会 但不想直接让人家教,只题醒一下就够了。不多说了
1、用了ejabberdhooks
2、用了ejabberdrouter
3、代码关键地方是11行和25行(不做解释,我也是朦胧懂,期待中。。。)
-module(my_module). -behaviour(gen_mod). -include("ejabberd.hrl"). -include("jlib.hrl"). %% gen_mod callback -export([start/2, stop/1, test/3]). start(Host, _Opt) -> ?DEBUG("-start my_module langxianwu~p,Host=~p",[lxwstart,Host]), ejabberd_hooks:add(user_send_packet,Host,?MODULE,test,50), ?DEBUG("-start my_module langxianwu~p",[lxwend]). stop(_Host) -> ok. test(From, To, Packet) -> ErrText = "Your dead LOL langxianwusendmessage", Lang = xml:get_tag_attr_s("xml:lang", Packet), Err = jlib:make_error_reply(Packet, ?ERRT_RESOURCE_CONSTRAINT(Lang, ErrText)), #jid{user=User} = To, ?DEBUG("langxianwutest1 packet Errtext= ~p,~n Lang ~p,~n Err=~p,~n User=~p ~n", [ErrText, Lang, Err,User]), case User of langzhe -> ?DEBUG("langzhetestUser= ~p,~n ", [User]); _-> ?DEBUG("langzhetestuser~p~n",[ok]), ejabberd_router:route(To, From, Err) end, %%ejabberd_router:route(To, From, Err), ?DEBUG("langxianwutest2 packet from ~p to ~p :~p", [From, To, Packet]). ~ ~ ~