最近は、ejabberd と内部モジュールの開発に取り組んでいます。
gen_mod + gen_server 動作を使用して内部モジュールを開発したいと考えています。私のモジュールには、これに基づいた ejabberd フックがあります: http://metajack.im/2008/08/28/writing-ejabberd-modules-presence-storms
私の start_link 関数は次のようなものです:
start_link(Host, Opts) ->
Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
gen_server:start_link({local, Proc}, ?MODULE, [Host, Opts], []).
?PROCNAME は次のとおりです。
-define(PROCNAME, ejabberd_mod_mine)
したがって、私のローカルホストでは次のように登録されていますejabberd_mod_mine_localhost
私がリンクしたチュートリアルでわかるように、プレゼンススタンザを直接解析するためにフックを使用していますが、そのFrom
値を gen_server 状態で保存した値と比較したい場合はどうすればよいでしょうか? パケットを渡す gen_server キャストを使用することを考えましたが、問題は、関数フックが別のプロセスで実行されるため、使用できないことです。
gen_server:cast(self(), {filter, Packet})
そして私はただ使うことができます:
gen_server:cast(ejabberd_mod_mine_localhost, {filter, Packet})
しかし、プロセスの名前をハードコードする必要がありますか? ホスト名が違う場合は?モジュール名だけを使用して gen_server を登録する必要がありますか?