14

私は Ejabberd をテスト ユーザーで起動して実行しており、正常に動作しています。次のように、メッセージを傍受して変更できるモジュールを作成したいと思います。

  1. 「メッセージ」を傍受する
  2. それらをphpファイルに送信します
  3. 同じ php ファイルから結果を取得する (即時)
  4. メッセージスタンザを変更し、受信者に送信します

ejabberd のドキュメントは弱く、チュートリアルは存在しません。これを行うサンプルコードを教えてください。その後、自分のニーズに合わせて構成する方法を理解できます。

バンドルありがとう!

アディル

4

4 に答える 4

14

このようなモジュールの基本的な例を次に示します。

-module(packet_interceptor).
-behaviour(gen_mod).

-export([start/2,
         stop/1]).

-export([on_filter_packet/1]).


start(Host, _Opts) ->
    ejabberd_hooks:add(filter_packet, global, ?MODULE, on_filter_packet, 0).

on_filter_packet({From, To, XML} = Packet) ->
    %% does something with a packet
    %% should return modified Packet or atom `drop` to drop the packet
    Packet.

moduleそして、このモジュールを ejabberd の構成のセクションに必ず追加してください。

{modules,
 [...
  ...
  ...
  {packet_interceptor, []}
 ]}.

on_filter_packet/1必要な方法で拡張し、適切に変更されたパケットを返すだけです。

于 2009-12-21T15:45:12.370 に答える
1

gleber の例は優れています。また、Chesspark 用に作成したmod_sunshineというパケット操作のより複雑な例も 作成しました。

この XML データを (?xml= 経由で) php に送信し、結果の XML を取得して受信者に渡すにはどうすればよいでしょうか?

exmpp を使用する最新バージョンの ejabberd を使用している場合は、exmpp_xml:node_to_binary/1 または exmpp_xml:node_to_list/1 を使用して、XML の内部表現をそれぞれバイナリまたは文字列に変換できます。

古い ejabberd にも同様の名前の関数がありましたが、xml モジュール内にありました。

于 2009-12-22T15:59:17.020 に答える
0

インターフェイスがあります:

ejabberd_router:register_route(MyHost)

私は過去に使用したことがあり、うまく機能します。がMyHostejabberdに登録されると、モジュールはメッセージをMyHost介して意図された通信を受信しinfoます(と仮定gen_server)。

@gleberが指摘しているように、モジュールを構成ファイルに追加することを忘れないでください。

于 2009-12-21T16:35:58.173 に答える
0

そこでやりたいことは、XMPP サーバー コンポーネントを作成することのようです。サーバー コンポーネントの開発を実験するための XMPP サーバーの投稿で、多くのことが既に述べられています。

役立つリンクをいくつかリンクできます。

Gleber のソリューションは実際には「ejabberd」指向です (確かにあなたのケースでは最も簡単なソリューションです) が、これは他の XMPP サーバーで拡張できます。

于 2009-12-21T16:06:05.503 に答える