summaryrefslogtreecommitdiff
path: root/fml/doc
diff options
context:
space:
mode:
authorfukachan <fukachan>2001-10-12 11:00:20 +0000
committerfukachan <fukachan>2001-10-12 11:00:20 +0000
commit62aa69b642c3b5e39d84246f4befd8e26169120e (patch)
tree2b173b46e9533cb6948e1ce260899fcbb56a0a8d /fml/doc
parent2296f8d5b67e61339004a989cc2d7b9b83064261 (diff)
downloadfml8-62aa69b642c3b5e39d84246f4befd8e26169120e.tar.gz
fml8-62aa69b642c3b5e39d84246f4befd8e26169120e.tar.bz2
fml8-62aa69b642c3b5e39d84246f4befd8e26169120e.zip
Diffstat (limited to 'fml/doc')
-rw-r--r--fml/doc/ja/tutorial/command/chapter.sgml80
-rw-r--r--fml/doc/ja/tutorial/command/internal.sgml92
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>