summaryrefslogtreecommitdiff
path: root/fml/doc/ja/tutorial/command/internal.sgml
diff options
context:
space:
mode:
authorfukachan <fukachan>2001-10-12 11:00:20 +0000
committerfukachan <fukachan>2001-10-12 11:00:20 +0000
commitf733be0f8dc9703b8d222109b4ed5cf7ae7ae5c1 (patch)
treebb5e647e8cac8cf4d646d592f142b4ced3b9b2a1 /fml/doc/ja/tutorial/command/internal.sgml
parent652da9da7d1563891a6deb20fe9f92b27fbd4024 (diff)
downloadfml8-f733be0f8dc9703b8d222109b4ed5cf7ae7ae5c1.tar.gz
fml8-f733be0f8dc9703b8d222109b4ed5cf7ae7ae5c1.tar.bz2
fml8-f733be0f8dc9703b8d222109b4ed5cf7ae7ae5c1.zip
Initial revision
Diffstat (limited to 'fml/doc/ja/tutorial/command/internal.sgml')
-rw-r--r--fml/doc/ja/tutorial/command/internal.sgml92
1 files changed, 92 insertions, 0 deletions
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>