您好,登錄后才能下訂單哦!
機緣巧合,在我認識brew一周后,需要在Brew上使用到Http,用到了IWeb接口,備述如下:
1.調用IWEB_GetResponse
先看代碼如下:
CALLBACK_Init(&pMe->IWebRespCallback, IWebResponseCallbackNotifyFunc, pMe);
IWEB_GetResponse(pMe->pIWeb,
(pMe->pIWeb, &pMe->pIWebResp, &pMe->IWebRespCallback,
url,
WEBOPT_HANDLERDATA, pMe,
WEBOPT_STATUSHANDLER, IWebStatusNotify,
WEBOPT_METHOD, "GET",
WEBOPT_END));
IWEB_GetResponse接口需要一個AEECallback,所以需要調用CALLBACK_Init設置該callback,這個 CALLBACK_Init其實就是把后面兩個參數填充到callback這個結構中,它的后兩個參數,一個是具體的callback函數,一個是用于傳 給callback的userdata。
IWEB_GetResponse其實是個宏,前面幾個參數分別是
IWeb *pIWeb, 這個是IWeb實例
IWebResp **ppiwresp,這個是一個傳出參數,后面接收數據全靠這哥們
AEECallback *pcb,這個是剛才設置的回調
在后面幾個宏比較有意思,實際上,他們都是成對出現的,WEBOPT_XXX一系列的宏都用于指定HTTP的行為,有特點的含義
WEBOPT_HANDLERDATA 指定userdata,也就是指定它后面的參數是個userdata,用在后面callback中
WEBOPT_STATUSHANDLER,指定一個status callback,IWebStatusNotify就是這個callback
WEBOPT_METHOD,指定http的method
2.設置WebRespInfo
調用IWEB_GetResponse后,會有一個傳出參數IWebResp,在Brew認為ready的時候,會回調我們在IWEB_GetResponse中設置的callback,
在callback中調用IWEBRESP_GetInfo可以從中取出一個WebRespInfo,這個info很重要,因為它里面有一個ISource,有了這個ISource我們就可以異步得到數據了
上代碼:
WebRespInfo* pWebRespInfo = IWEBRESP_GetInfo(pMe->pIWebResp);
if(pWebRespInfo)
{
// the body of the response is contained in the ISOURCE within
pMe->pIWebSource = pWebRespInfo->pisMessage;
//AEECallback callback;
CALLBACK_Init(&(pMe->IWebSourceCallback), IWebSourceCallbackNotifyFunc, pMe);
ISource_Readable(pMe->pIWebSource, &(pMe->IWebSourceCallback));
}
可以看到,為了從ISource里取數據,有設置一個callback,IWebSourceCallbackNotifyFunc,在這個callback中,我們就可以調用ISource_Read獲取數據了
特別需要說明的是,ISource_Read調用完了以后,需要再次調用ISource_Readable,設置callback,否則下次callback就不會來了
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。