Example: web_sync

In this example, web_sync is used to suspend the script run until the parameter is created in the call-back routine.


//Register a polling pattern
    web_reg_async_attributes("ID=LongPoll_0",
        "URL/IC=http://my_server/cgi-bin/SLEEP_random_TIME.asp?1332922209853",
        "Pattern=LongPoll",
        "RequestCB=LongPoll_0_RequestCB",
        "ResponseBodyBufferCB=LongPoll_0_ResponseBodyBufferCB",
        "ResponseCB=LongPoll_0_ResponseCB",
        LAST);

//Start the polling pattern
    web_url("sleep_random_time.asp",
        "URL=http://my_server/cgi-bin/sleep_random_time.asp?1332922209853",
        "Resource=0",
        "RecContentType=text/html",
        "Referer=http://my_server/webgui/polling/xmlhttprequest_long_polling_async_get.html",
        "Snapshot=t3.inf",
        "Mode=HTML",
        LAST);

//Start the transaction
     lr_start_transaction("long poll");

//Wait for parameter to be created (see below in AsyncCallbacks.c)
    web_sync("ParamCreated=ready","RetryIntervalMs=3000","RetryTimeoutMs=120000",LAST);

    wait_time = lr_get_transaction_duration("long poll");
    lr_end_transaction("long poll", LR_AUTO);


    web_stop_async("ID=LongPoll_0",
    LAST);

    lr_free_parameter("ready");

From AsyncCallbacks.c

//The response call-back is called after each long-polling response is received.
    int LongPoll_0_ResponseCB(
    const char * aResponseHeadersStr,
    int          aResponseHeadersLen,
    const char * aResponseBodyStr,
    int          aResponseBodyLen,
    int          aHttpStatusCode)
    {
    //enter your implementation for ResponseCB() here

//Increment long-polling response counter
    counter++;
    lr_output_message("@@@ Long poll response received in [%s] ms", aResponseBodyStr);

//Set parameter value to indicate that 10 long-polling responses were received.
    if (counter>10 || (strcmp(aResponseBodyStr,"6000")==0))
        lr_save_string("OK","ready");

    return WEB_ASYNC_CB_RC_OK;
    }