From 01e1f677c72b923251f7021bc024319ff129d42d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20R=C3=A9mond?= Date: Thu, 29 Jan 2015 18:43:47 +0100 Subject: Add Elixir support to ejabberd --- lib/Ejabberd/hooks.ex | 13 +++++++++++++ lib/Ejabberd/logger.ex | 9 +++++++++ lib/ejabber.ex | 2 ++ lib/mod_presence_demo.ex | 21 +++++++++++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 lib/Ejabberd/hooks.ex create mode 100644 lib/Ejabberd/logger.ex create mode 100644 lib/ejabber.ex create mode 100644 lib/mod_presence_demo.ex (limited to 'lib') diff --git a/lib/Ejabberd/hooks.ex b/lib/Ejabberd/hooks.ex new file mode 100644 index 000000000..a9e0dfef7 --- /dev/null +++ b/lib/Ejabberd/hooks.ex @@ -0,0 +1,13 @@ +defmodule Ejabberd.Hooks do + + # Generic hook setting features + def add(hook_name, host, module, function, priority) do + :ejabberd_hooks.add(hook_name, host, module, function, priority) + end + + # Should be named 'removed' + def delete(hook_name, host, module, function, priority) do + :ejabberd_hooks.delete(hook_name, host, module, function, priority) + end + +end diff --git a/lib/Ejabberd/logger.ex b/lib/Ejabberd/logger.ex new file mode 100644 index 000000000..bef1cb3aa --- /dev/null +++ b/lib/Ejabberd/logger.ex @@ -0,0 +1,9 @@ +defmodule Ejabberd.Logger do + + def critical(message, args \\ []), do: :lager.log(:critical, [], message, args) + def error(message, args \\ []), do: :lager.log(:error, [], message, args) + def warning(message, args \\ []), do: :lager.log(:warning, [], message, args) + def info(message, args \\ []), do: :lager.log(:info, [], message, args) + def debug(message, args \\ []), do: :lager.log(:debug, [], message, args) + +end diff --git a/lib/ejabber.ex b/lib/ejabber.ex new file mode 100644 index 000000000..a843abc97 --- /dev/null +++ b/lib/ejabber.ex @@ -0,0 +1,2 @@ +defmodule Ejabberd do +end diff --git a/lib/mod_presence_demo.ex b/lib/mod_presence_demo.ex new file mode 100644 index 000000000..89fc60d87 --- /dev/null +++ b/lib/mod_presence_demo.ex @@ -0,0 +1,21 @@ +defmodule ModPresenceDemo do + import Ejabberd.Logger # this allow using info, error, etc for logging + @behaviour :gen_mod + + def start(host, _opts) do + info('Starting ejabberd module Presence Demo') + Ejabberd.Hooks.add(:set_presence_hook, host, __ENV__.module, :on_presence, 50) + :ok + end + + def stop(host) do + info('Stopping ejabberd module Presence Demo') + Ejabberd.Hooks.delete(:set_presence_hook, host, __ENV__.module, :on_presence, 50) + :ok + end + + def on_presence(user, _server, _resource, _packet) do + info('Receive presence for #{user}') + :none + end +end -- cgit v1.2.3