summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMickaël Rémond <mremond@process-one.net>2015-01-29 18:43:47 +0100
committerMickaël Rémond <mremond@process-one.net>2015-02-10 17:56:44 +0100
commit01e1f677c72b923251f7021bc024319ff129d42d (patch)
tree38c3101d86f42b62774df909193cdfe6be69614c /lib
parentDocument EJABBERD_CONFIG_PATH in ejabberdctl.cfg (diff)
Add Elixir support to ejabberd
Diffstat (limited to 'lib')
-rw-r--r--lib/Ejabberd/hooks.ex13
-rw-r--r--lib/Ejabberd/logger.ex9
-rw-r--r--lib/ejabber.ex2
-rw-r--r--lib/mod_presence_demo.ex21
4 files changed, 45 insertions, 0 deletions
diff --git a/lib/Ejabberd/hooks.ex b/lib/Ejabberd/hooks.ex
new file mode 100644
index 00000000..a9e0dfef
--- /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 00000000..bef1cb3a
--- /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 00000000..a843abc9
--- /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 00000000..89fc60d8
--- /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