POPFile は、Perl の OO (Object Oriented : オブジェクト指向)機能を使ったモジュールの集まりから構成されています。 これらのモジュールは以下の3種類に分けられます。
Perl はメソッドやメンバー変数へのアクセスを管理する機構を持っていないので、POPFile はプライベート、プロテクテッド、パブリックを区別するためにメソッド名やメンバー変数名のつけかたに便宜的なルールを使います。
主なオブジェクトは下記のような関係にあります:
POPFile::Module ^ | | +---------------------------------+------------+-----------+------------+-----------------+----------------------+--------------+ | | | | | | | | | | | | | | Classifier::Bayes Proxy::Proxy UI::HTTP UI::XMLRPC POPFile::Configuration POPFile::Logger POPFile::MQ (has a Classifier::MailParse ^ ^ and a Classifier::WordMangle) | | | | +-------------+-----------+ | | | | | Proxy::POP3 Proxy::SMTP Proxy:NNTP UI::HTML
このモジュールはすべての POPFile Loadable Modules の基礎となるクラスを実装しており、すべての POPFile モジュールに共通のメソッドを含みます。特定のものだけが、サブクラスによってオーバーライドされる必要があります。 すべてのパプリック関数は正常に POPFile が動いている間に POPFile::Loader によって呼ばれます。
次のメソッドはプロテクトされており、サブクラスからのみアクセスするようにしてください。
PLM によっては POPFile セッション間の情報を保持したり、パラメータを変更可能にしたりしたい場合があるでしょう。 POPFile は POPFile::Configuration モジュールによって管理される、パラメータを保持するための汎用的な機構を持っています。
どの PLM もそれ自身のパラメータを config_ メソッドを通じて登録したりアクセスしたりすることができます。<br> 単一のパラメータを指定して config_ を呼べば(たとえば $self→config_( 'my_param' ))、そのパラメータの設定値を得ることができます。 これは PLM の initialize() 関数が一度呼ばれたあとならば、実行することができます。<br> 2つのパラメータをつけて config_ を呼べば、そのパラメータの値を設定することができ、POPFile::Configuration モジュールにパラメータ・テーブルが変更されていてディスクに保存する必要があることを知らせます。
パラメータに初期値を設定するために、PLM は それ自身の initialize メソッドの中で config_ を呼びます。 すべての PLM が initialize() を呼んだあとで、POPFile は現行のパラメータをディスクから読み、こうして初期値もディスクに保存されていた値も考慮されるようになります。
複数のモジュール間でパラメータ名の衝突が起きる心配はありません。それぞれのパラメータは、保持されたりアクセスされたする前に個別の名前空間に配置されているからです。 これは、現在のところ、PLM が name を使って設定する名前によって決定されます。 PLM の名前を、何かが config_ を呼ぶ前にセットしておくことが必須です。これは通常は PLM の new メソッドによって実行されます。 現在のところ、名前はパラメータ名の前に _ をはさんで追加されます。 こうして、foo と bar という名前を持つモジュールはそれぞれが param という異なったパラメータを定義できますが、これらはディスクに保存される前に foo_param と bar_param に変換されます。 この (モジュール名とパラメータ名を _ をはさんでつなぐという) ルールはいつ変更されるかわからないので、PLM はこの命名法を前提としてはならず、config_ 経由でのみパラメータにアクセスするようにしてください。
PLM が、他のモジュールのパラメータを読み取る必要があることもあります。 これはモジュール名(その name を呼ぶことで設定された名前)をつけて module_config_ を呼ぶことで、実行できます。 たとえば、ある PLM は $self→module_config_( 'foo', 'param' ) を呼ぶことで、foo モジュールの param パラメータにアクセスできます。 (しかしながら、できる限り) この機能を使うことは控えるべきでしょう。
なお、グローバル・パラメータにアクセスするには global_config_ を使います。
POPFile::MQ は、POPFile::Module のすべてのサブクラスが他のモジュールにメッセージを送るためにアクセスする汎用的なメッセージ・キューイング・システムです。 どのモジュールも、メッセージ・タイプ別に登録された他のモジュールへ非同期のメッセージ送信ができます。
モジュールは mq_register_ で特定のメッセージ・タイプ (そのタイプのメッセージを受け取るために) に登録します。 モジュールは、パブリック関数 deliver を実装しなければなりません。このモジュールを通してメッセージが配達されることになります。 モジュールは mq_post_ によってメッセージを送信します。 現時点では、メッセージは自由様式であり、メッセージ・タイプについての明確な決まりはありません。 もし、新しいメッセージ (タイプ) が追加される場合には、POPFile::MQ の先頭部分に (追加したメッセージタイプについての) 説明文書を追加してください。
現時点でのメッセージは以下のとおりです:
メッセージ ID | 説明 | 送信元 | 受信者 | ||||
CLASS | メールが分類されたことの通知。メッセージはバケツであり、パラメータは null。 | Proxy::Proxy | UI::HTML | ||||
UIREG | UI コンポーネントの登録。メッセージはコンポーネント・タイプであり、パラメータは UI 上の要素と登録しようとしているオブジェクトへのリファレンス。 | Proxy::POP3, Proxy::SMTP, Proxy::NNTP, UI::XMLRPC | UI::HTML | ||||
TICKD | 最終の TICKD から1時間経過したとき発生。 | POPFile::Logger | UI::HTML, POPFile::Logger | ||||
LOGIN | プロキシがリモート・サーバーへログインしたとき発生。メッセージは (リモート・サーバーに) 送られたユーザー名。 | Proxy::Proxy | UI::HTML | ||||
NEWFL | 新しいファイルがディスク上の履歴キャッシュへ書かれたときに発生。メッセージはファイル名。 | Proxy::Proxy | UI::HTML |
UIREG は、POPFile::Module の register_configuration_item_ を呼ぶことで、送られます。
下図が、どのメッセージを誰が送って誰が受信するのかを理解する助けになるでしょう。
UI::HTML ^ ^ ^ | | | | | +------------------------+ | | | +-------+ +----------+ | | | | | +------+ NEWFL | | | | LOGIN | TICKD | CLASS UIREG | | | | POPFile::Logger | Proxy::Proxy Proxy::POP3 ^ | (via pipe from Proxy::NNTP | | POP3/SMTP/NNTP) Proxy::SMTP +--------+ UI::XMLRPC
Should you find anything in the documentation that is incomplete, unclear, outdated or just plain wrong, please let us know and leave a note in the Documentation Forum.