Current section

Files

Jump to
ejabberd src mod_presence.erl
Raw

src/mod_presence.erl

-module(mod_presence).
-behaviour(gen_mod).
-include("jlib.hrl").
-export([start/2, stop/1, mod_opt_type/1]).
-export([set_presence/4, unset_presence/4]).
start(Host, _Opts) ->
ejabberd_hooks:add(set_presence_hook, Host, ?MODULE, set_presence, 50),
ejabberd_hooks:add(unset_presence_hook, Host, ?MODULE, unset_presence, 50),
ok.
stop(Host) ->
ejabberd_hooks:delete(set_presence_hook, Host, ?MODULE, set_presence, 50),
ejabberd_hooks:delete(unset_presence_hook, Host, ?MODULE, unset_presence, 50),
ok.
set_presence(User, Server, Resource, XMLEl) ->
Show = fxml:get_subtag_cdata(XMLEl, <<"show">>), %% away, etc
io:format("set_presence: ~p~n", [{User, Server, Resource, Show}]),
report(<<"set_presence">>, User, Server, Resource, Show),
ok.
unset_presence(User, Server, Resource, StatusMsg) ->
io:format("unset_presence: ~p~n", [{User, Server, Resource, StatusMsg}]),
report(<<"unset_presence">>, User, Server, Resource, StatusMsg),
ok.
report(Event, User, Server, Resource, Status) ->
Payload = jiffy:encode(
{[{<<"event">>, Event},
{<<"user">>, User},
{<<"domain">>, Server},
{<<"resource">>, Resource},
{<<"status">>, Status}]}),
case httpc:request(post,{"http://localhost:8000/presence", [], "application/json", Payload},
[{timeout, 15000},{connect_timeout, 15000}],
[{body_format, binary}]) of
{ok, {{_, 200, _}, _Headers, _RespBody}} ->
ok;
_ ->
ok
end.
mod_opt_type(_) -> [].