diff options
Diffstat (limited to 'src/core/ephraim_event.erl')
-rw-r--r-- | src/core/ephraim_event.erl | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/core/ephraim_event.erl b/src/core/ephraim_event.erl new file mode 100644 index 0000000..dd86a7b --- /dev/null +++ b/src/core/ephraim_event.erl @@ -0,0 +1,42 @@ +-module(ephraim_event). +-compile([debug_info, export_all]). +-include_lib("exmpp/include/exmpp.hrl"). + +-spec init() -> ok. +init() -> + loop(). + +-spec handleEvent(binary(), #xmlel{}) -> ok. +handleEvent(From, Item) -> + HasAvatarData = exmpp_xml:has_element(Item, 'urn:xmpp:avatar:data', data), + if HasAvatarData -> + Element = exmpp_xml:get_element(Item, 'urn:xmpp:avatar:data', data), + Data = base64:decode(exmpp_xml:get_cdata_from_list(Element#xmlel.children)), + ephraim ! {roster, {avatar, From, Data}}; + true -> + io:format("Received unhandled event from ~p:~n~p~n", [From, Item]) + end. + +-spec handleEvents(binary(), [#xmlel{}]) -> ok. +handleEvents(_, []) -> + ok; +handleEvents(From, [Item|Rest]) -> + handleEvent(From, Item), + handleEvents(From, Rest). + +-spec loop() -> ok. +loop() -> + receive + stop -> + ok; + + {receive_event, From, Packet} -> + Event = exmpp_xml:get_element(Packet, 'http://jabber.org/protocol/pubsub#event', event), + Items = exmpp_xml:get_element(Event, 'http://jabber.org/protocol/pubsub#event', items), + handleEvents(From, Items#xmlel.children), + loop(); + + Msg -> + io:format("ephraim_event: ~p~n", [Msg]), + loop() + end. |