Ejabberd is very popular scalable XMPP server. This server is an instant messaging or chatting server. It is written in erlang. It implements it’s features in forms of modules. These modules can be seen as plugins. Here is how it works. This is our continuous effort to investigate plugins in different projects.
Here the mod_last is taken as example. Most of the modules here in ejabberd are small and less than 500 lines. Here is a small window of the output of find -iname "mod_*.erl" | xargs wc
in linux shell. The values in left column are the number of lines.
....
198 825 8244 ./src/mod_echo.erl
173 566 5827 ./src/mod_proxy65_sm.erl
682 1991 22312 ./src/mod_register.erl
351 1082 11792 ./src/mod_last.erl
1463 4336 48959 ./src/mod_shared_roster.erl
1347 3897 45857 ./src/mod_irc.erl
270 1087 10304 ./src/mod_carboncopy.erl
109 380 3650 ./src/mod_time.erl
97 330 3437 ./src/mod_service_log.erl
....
It is interesting that mod_last contains only 351 lines of code including the code comments. So this file will be easy to follow.
The purpose of this module
This module keeps a record of the time when a person is last seen online.
Loading and unloading
The modules here are loadable. They have a start and stop functions to initiate and deinitialize them. The start function takes two arguments and stop takes one argument.
Extension points
The start function here registers hook for following events.
- unset_presence_hook
The on_presence_update function is called when user is logged out of server. It just stores the time entry in the database.
ejabberd_hooks:add(unset_presence_hook, Host, ?MODULE,
on_presence_update, 50).
on_presence_update(User, Server, _Resource, Status) ->
TimeStamp = now_to_seconds(now()),
store_last_info(User, Server, TimeStamp, Status).
- remove_user
When the user is removed permanently from server he is deleted from last_activity database.
ejabberd_hooks:add(remove_user, Host, ?MODULE,
remove_user, 50),
There are other hooks that answer the user activity information and do other things.
Summary
This is very interesting to see how small the code is. And it is very precise too. Programmers will love to write modules here. It can be given 500 points for the mechanism (there will be more points coming for other projects). Thanks to erlang, nice language.
No comments:
Post a Comment