ハンドラー関数の記述¶
ハンドラー関数は継続の重要なコンポーネントです。これはイベントとイベントデータを検査し、その後適切な処理を行う事になっています。行われるであろうアクションは、別のイベントを継続が受け取るようスケジュールする、サーバへのコネクションを開始する、単純に自身を破棄するなどになる可能性があります。
継続のハンドラー関数は TSEventFunc
型の関数です。引数は継続、イベント、そして幾つかのデータ(このデータは呼び出し元によって継続に渡されます。このデータを TSContDataSet()
によって関連付けられる継続自身のデータと混同しないでください。)へのポインタです。継続がコールバックされる際、継続とイベントはハンドラー関数に渡されます。継続は発生した同じ継続へのハンドルです。ハンドラー関数は典型的に受け取ったイベントを処理するための switch 文を持ちます。 :
static int some_handler (TScont contp, TSEvent event, void *edata)
{
// .....
switch(event) {
case TS_EVENT_SOME_EVENT_1:
do_some_thing_1;
return;
case TS_EVENT_SOME_EVENT_2:
do_some_thing_2;
return;
case TS_EVENT_SOME_EVENT_3:
do_some_thing_3;
return;
default: break;
}
return 0;
}
ご用心
継続は更なるイベントが向かってきている "途中" かどうか確認できないことに気付くかもしれません。 TSHttpTxnHookAdd()
の呼び出しによって送られるような、全てのやって来るイベントが処理されたのを確認する前に、継続を削除するための TSContDestroy()
を使用しないでください。
下記の表ではハンドラー関数に渡されるイベントと void* data の型に相当するものを列挙します。 :
継続関数を以下に列挙します。 :