基於ejabberd簡單實現xmpp群聊離線消息


首先,xmpp服務器是基於ejabberd。離線消息模塊是mod_interact,原地址地址:https://github.com/adamvduke/mod_interact; 修改后實現群聊離線消息:https://github.com/Joywok/mod_interact

不僅僅要修改這一個文件,還涉及到ehabberd_sm、mod_muc_room、mod_offline三個模塊的修改。

以上三個文件僅僅只需要屏蔽或者修改幾行代碼就能實現了,很簡單的。

ehabberd_sm屏蔽以下兩行代碼:

1
2
<< "groupchat" >> ->
bounce_offline_message(From, To, Packet);

mod_offline: 
將下面一行代碼修改

1
if (Type /= << "error" >>) and (Type /= << "groupchat" >>)

修改后的:

1
if (Type /= << "error" >>)

mod_muc_room這個模塊多要修改幾行,muc只是給在線的用戶發送消息,那么不在線的用戶就收不到了,所以在發送消息那塊把發送在線的用戶修改為muc的成員就ok了。

把以下一個遍歷代碼修改:

1
2
3
4
5
6
7
8
9
lists:foreach(
  fun({_LJID, Info}) ->
  ejabberd_router:route(
  jlib:jid_replace_resource(
StateData#state.jid,
FromNick),
Info#user.jid,
  Packet)
  end,?DICT:to_list(StateData#state.users)),

修改后的代碼:

1
2
3
4
5
6
7
8
9
10
11
12
lists:foreach(
  fun(Info) ->
  {Jid,_} = Info,
{Email,Server,Source}=Jid,
To={ 'jid' ,Email,Server,Source,Email,Server,Source},
ejabberd_router:route(
jlib:jid_replace_resource(
  StateData#state.jid,
FromNick),
To,
Packet)
end,?DICT:to_list(StateData#state.affiliations)),

重新編譯模塊,替換原來的模塊,重啟ejabberd服務器就ok了。

按照這個就能簡單的實現群聊離線消息了。

貼上github實現地址:https://github.com/cisiqo/ejabberd-module-dev 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM