トップページ > 2. マニュアル > 2.1. チュートリアル > チュートリアル(2) calc :簡単な計算機を作る/その2

チュートリアル(2) calc :簡単な計算機を作る/その2

計算タスクを作る

 それでは、実際の計算を行うタスクを作成してみましょう。「チュートリアル(1)」で作成したモジュール「hello」をコピーして、計算機モジュール「calc」を作成します。

 計算機モジュール「calc」は以下のような方針で作成します。

  • タスククラスCalTask
  • イベントはフレームワーク同梱のrefresh_event@:event:refreshを使用

 「チュートリアル(1)」で作成したモジュール「hello」の階層と同じレベルに、新たに「calc」フォルダを作成し、上の図のようにテキストファイルを3つ作成してください。

 以下、それぞれのファイルの中身を説明します。

プロシージャ設定ファイル(procedure.ini)

 プロシージャ設定ファイルは、モジュールがプロシージャとして実行された際の動作を定義します。設定できる項目としては、以下のものがあります。

設定キー 意味
class_name プロシージャのクラス名(通常Charcoal_HttpProcedure)
task_manager プロシージャのタスクマネージャ(通常default_task_manager)
modules プロシージャ自動的にロードされるモジュール
events プロシージャ自動的に投入されるイベント
layout_manager レイアウトマネージャ(今回は使用しないので空欄)

タスクマネージャとは

 プロシージャ設定ファイルの設定項目に「task_manager」というエントリがあります。これは、CharcoalPHPのイベント・タスクシステムと深い関わりがあります。

 前節でプロシージャはイベントとタスクで構成されているお話をしましたが、プロシージャはタスクとイベントの管理をプロシージャ自身でなく、「タスクマネージャ」というオブジェクトに委譲しています。このような分業をすることで、同じプロシージャでもタスクマネージャのロジックを入れ替えるてイベントとタスクの制御方式を変更することができます。

 ここで指定されている「default_task_manager」は別名で実体(実際のクラス名)は「Charcoal_DefaultTaskManager」になります。Charcoal_DefaultTaskManagerはイベントキューを持ち、1回のループで1イベントを処理します。タスクとイベントはそれぞれ優先度(プライオリティ値)を持っており、優先度が高いイベントやタスクが優先的に実行されます。認証が必要なシステムでは、認証タスクと認証イベントのプライオリティを高く設定することで、本来の処理を行うタスクの前に認証済みかどうかをチェックすることができます。

 最初のうちはタスクマネージャについてあまり理解する必要はありません。Webアプリケーション、コンソールアプリケーションいずれの場合もデフォルトのタスクマネージャで十分な場合がほとんどだからです。

タスク設定ファイル(calc_task.task.ini)

 計算機タスクの動作をカスタマイズするための設定ファイルです。以下のような内容で作成してください。

 設定ファイルのフォーマットはiniファイル形式となっています。iniファイル形式はPHPに限らず様々なプログラムの設定ファイルの形式として非常に一般的に使用されます。

 設定の内容ですが、まず「class_name」はタスクのクラス名を指定します。タスクのクラスはCalcTaskなので「CalcTask」を指定します。

 次に「event_filters」ですがこれはタスクが起動されるイベントを列挙したものです。ここに記載されたイベントが発火していない限り、タスクのprocessEventメソッドは決して実行されません。このケースではフレームワークに同梱されている基本イベントである「requestイベント(request)」を指定しています。これは、ただ単にタスクのprocessEventを起動するために指定しています。

 次回ではいよいよ計算機タスクの実装を行います!

Pocket

Comments are closed.