diff options
| author | fukachan <fukachan> | 2001-10-12 11:00:20 +0000 |
|---|---|---|
| committer | fukachan <fukachan> | 2001-10-12 11:00:20 +0000 |
| commit | 62aa69b642c3b5e39d84246f4befd8e26169120e (patch) | |
| tree | 2b173b46e9533cb6948e1ce260899fcbb56a0a8d /fml/doc | |
| parent | 2296f8d5b67e61339004a989cc2d7b9b83064261 (diff) | |
| download | fml8-62aa69b642c3b5e39d84246f4befd8e26169120e.tar.gz fml8-62aa69b642c3b5e39d84246f4befd8e26169120e.tar.bz2 fml8-62aa69b642c3b5e39d84246f4befd8e26169120e.zip | |
commandsnap-20011012
Diffstat (limited to 'fml/doc')
| -rw-r--r-- | fml/doc/ja/tutorial/command/chapter.sgml | 80 | ||||
| -rw-r--r-- | fml/doc/ja/tutorial/command/internal.sgml | 92 |
2 files changed, 172 insertions, 0 deletions
diff --git a/fml/doc/ja/tutorial/command/chapter.sgml b/fml/doc/ja/tutorial/command/chapter.sgml new file mode 100644 index 00000000..324feb56 --- /dev/null +++ b/fml/doc/ja/tutorial/command/chapter.sgml @@ -0,0 +1,80 @@ +<!-- + $FML: commands.sgml,v 1.7 2001/09/17 13:11:51 fukachan Exp $ +--> + +<chapter id="fml.command.op"> + <title> + fml をメールで操作する + </title> + +<para> +fml にメールで文字列(コマンド)を送り込むことで、fml に特定の処理をして +もらうことができます。例えば、メンバーの登録、削除や、過去の記事を取り +寄せるなどの処理です。 +</para> + +<para> +メールによるコマンド処理 +makefml によるコマンド処理 +CGI でのコマンド処理 +すべてが同じ FML::Command:: クラスのモジュールを使うことにします。 +</para> + + +<sect1 id="fml.command.module.hierarchy"> + <title> + FML::Command クラス以下の構成 + </title> + +<para> +FML::Command:: クラスの再構成 +<screen> +FML::Command.pm FML::Command クラス以下への入口 +FML::Command::ACL ACL +FML::Command::Utils よもやまの定義 +FML::Command::User ユーザ用コマンド群 +FML::Command::Admin ユーザ用コマンド群 +</screen> +</para> + +<para> +例えば、ユーザ用のコマンドの場合 +FML::Command.pm を経由して +FML::Command::User::コマンド.pm +モジュールを使うことになります。 +</para> + +</sect1> + + +&command.internal; + + +<sect1 id="fml.command.hack.example0"> + <title> コマンドの拡張の仕方の例 </title> + + + <sect2> + <title> 独自コマンドを作る。 </title> + + <para> + fml 5.0 では、 + 例えばユーザ向けのコマンド uja を作りたい場合、 + FML::Command 以下から適当に cut & paste して +<screen> +/usr/local/lib/fml/site_local/FML/Command/User/uja.pm +</screen> + というファイルを置けば OK にしようとしています。 + </para> + +<para> +これだけではだめで、許可するコマンドリストに追加して始めて有効になるよ +うにしないといけないでしょう。 +</para> + +</sect2> + + +</sect1> + +</chapter> diff --git a/fml/doc/ja/tutorial/command/internal.sgml b/fml/doc/ja/tutorial/command/internal.sgml new file mode 100644 index 00000000..0bfa8974 --- /dev/null +++ b/fml/doc/ja/tutorial/command/internal.sgml @@ -0,0 +1,92 @@ +<!-- + $FML$ +--> + +<sect1 id="fml.command.overview"> + <title> + コマンド処理の概要: + 『4.0 と 5.0 のコードの書き方はどのくらい違うか?』 + </title> + +<para> +コマンドの典型『ファイルを送り返す』だけの help コマンドを例にとり説明 +しましょう。 +</para> + +<para> +5.0 では help ファイルを送り返すコードの実体は + FML::Command::User::help にあり、 + FML::Process::Command クラスから + (FML::Command の AUTOLOAD を経由して)呼び出されます。 +</para> + +<warning> +<para> + 注意: 全てのコマンドは FML::Command::User::コマンド もしくは + FML::Command::Admin::コマンド クラスとして実装されています。 + なお makefml は FML::Command::Admin::コマンド を使います。 +</para> +</warning> + +<para> +help の実体は FML::Command::User::help のこの関数です。 +<screen> +sub process +{ + my ($self, $curproc, $optargs) = @_; + my $config = $curproc->{ config }; + my $charset = $config->{ reply_message_charset }; + my $help_file = $config->{ help_file }; + + # template substitution: kanji code, $varname expansion et. al. + my $params = { + src => $help_file, + charset_out => $charset, + }; + my $help_template = $curproc->prepare_file_to_return( $params ); + + if (-f $help_template) { + $curproc->reply_message( { + type => "text/plain; charset=$charset", + path => $help_template, + filename => "help", + disposition => "help", + }); + } + else { + croak("no help file ($help_template)\n"); + } +} +</screen> +ここで $curproc は UNIX カーネルでおなじみの current process 構造体へ +のポインタに相当するハッシュリファレンスです。 +そして $config ハッシュとして蓄えられている設定変数空間は、4.0 ではグ +ローバル変数です。 +</para> + +<para> +prepare_file_to_return() はメッセージテンプレートの中にある変数の展開 +や文字コード変換を適宜行ないます。 + </para> + +<para> +$curproc->reply_message() は引数によって振舞いがことなりますが、 +いずれにせよ、メッセージをキューに入れるメソッドです。 +</para> + +<para> +キューに入れられたメッセージ群は、プロセスの終了直前に一通のメールとし +て組み立てなおされ、Mail::Delivery クラス経由で送信されます。メッセー +ジキューの種類がファイルとメッセージが混在していれば、適宜 MIME マルチ +パートのメッセージが生成されます。 +</para> + +<para> +この仕組みは fml 4.0 の Notify() と同様ですが、あらゆるメッセージがキュー +に入れられ、最後に一気に処理されるという点で大きく異なります。get コマ +ンドなども同じように扱われます。つまり 4.0 の Notify() 相当部分が(通常 +の記事配送以外の)あらゆる送信機能を担当するということです。 +この点において、送信のキューイングのメカニズムは大きく異なっています。 +</para> + +</sect1> |
