コールバックの実装
非同期通信をサポートするプロトコルのリストについては,「64 ビット記録,非同期,IPv6 のサポート」を参照してください。
VuGen が仮想ユーザ・スクリプトで非同期通信をスキャンした後,デザイン・スタジオの[非同期]タブにスクリプトで見つかった非同期会話をリストします。スキャン中に見つかった非同期会話ごとに,VuGen は web_reg_async_attributes ステップで宣言されているコールバック関数に一致するコールバック関数の署名を追加します。この署名は,AsyncCallbacks.c 追加ファイルに追加されます。
コールバック関数の名前の先頭は,非同期会話の会話 ID です。たとえば,ID が「LongPoll_0」である非同期会話の RequestCB コールバックは,LongPoll_0_RequestCB になります。
コールバック関数の名前は,スクリプトの web_reg_async_attributes ステップで宣言されます。
使用可能なコールバックは,次のとおりです。
-
RequestCB
このコールバックは,要求が送信される前に呼び出されます。
-
ResponseBodyBufferCB
このコールバックは,応答本文バッファ内および応答本文の終わりに内容がある場合に呼び出されます。このコールバックは,プッシュ・タイプの会話に対して VuGen によって自動的に生成されます。ただし,ポーリングおよびロング・ポーリング会話でも使用できます。
-
ResponseCB
このコールバックは,会話で各応答が受信された後に呼び出されます。
例 1:
次のサンプル・コードでは,web_reg_async_attributes ステップでコールバック関数が宣言されています。
/*Added by Async CodeGen.
ID=LongPoll_0
ScanType = Recording
次の URL は,この会話の一部としてみなされます。
http://your_URL.com/request.ashx?key=111111-11
http://your_URL.com/request.ashx?key=111111-11
http://your_URL.com/request.ashx?key=111111-11
http://your_URL.com/request.ashx?key=111111-11
TODO - 次のコールバックが AsyncCalIbacks.c に追加されています。
必要に応じて,コールバック実装にコードを追加します。
LongPoll_0_RequestCB
LongPoll_0_ResponseC8
*/
web_reg_async_attributes("ID: LongPoll_0",)
"URL: http://your_URL.com/request.ashx?key=111111-11",
"Pattern=LongPoll"
"RequestCB=LongPoll_0_RequestCB",
"ResponseCB=LongPoll_0_ResponseCB",
LAST);
例 2:
次のサンプル・コードでは,AsyncCallbacks.c 追加ファイルに 2 つのコールバックが実装されています。
int LongPoll_0_RequestCB()
{
//enter your implementation for RequestCB() here
//call web_util_set_request_url() here to modify polling url:
//web_util_set_request_url("<request_url>");
//call web_util_set_request_body() here to modify request body:
//web_util_set_request_body("<request_body>");
return WEB_ASYNC_CB_RC_OK;
}
int LongPoll_0_ResponseCB(
const char * aResponseHeadersStr,
int aResponseHeadersLen,
const char * aResponseBodyStr,
int aResponseBodyLen,
int aHttpStatusCode)
{
//enter your implementation for ResponseCB() here
return WEB_ASYNC_CB_RC_OK;
}
必要な動作を実装するように,このコールバックを変更できます。詳細については,「コールバックの変更」 を参照してください。
例 3:
次のサンプル・コードでは,3 つの引数を含む ResponseHeaders コールバック関数の実装を示しています。HTTP ステータス・コード,累積ヘッダ文字列,累積ヘッダ文字列長。
int Push_0_ResponseHeadersCB(
int aHttpStatusCode,
const char * aAccumulatedHeadersStr,
int aAccumulatedHeadersLen)
{
//Enter your implementation for ResponseHeadersCB() here.
lr_output_message("Response status code is :[%d]", aHttpStatusCode);
lr_output_message("Response headers are :/n[%s]", aAccumulatedHeadersStr);
return WEB_ASYNC_CB_RC_OK;
}
上記のコールバック関数のサンプル出力は次のようになります。
Response status code is :[200]
Response headers are :
[HTTP/1.1 200 OK
Connection: close
Date:Tue, 25 Jun 2013 09:03:33 GMT
Server: Microsoft-IIS/6.0
Content-Type: text/html
Cache-control: private]