2010-09-26 51 views
1

我正在研究將實現特定即時消息協議的客戶端的類。
我需要先做一個HTTP請求,然後讀取數據,並使用從第一個請求收到的已處理數據創建另一個HTTP請求,並且只有在第二個請求之後,我才能打開一個到服務器的tcp套接字。 什麼是最好的方式(最好的QT方式?)去做這件事,因爲我還沒有找到一種方法來阻止,直到HTTP請求結束。我正在考慮對這部分使用libcurl,但似乎使用另一個lib僅用於這一點矯枉過正。Qt和HTTP下載

回答

1

QHttp將發送一組信號來通知請求的狀態。例如,您可以將requestFinished()信號連接到將處理該信號並開始第二個請求的插槽。

Idea在僞QT

//possibly in constructor 
connect(myHttp, SIGNAL(requestFinished(int, bool)), 
     this, SLOT(requestHandler(int, bool))) 


//first call somewhere 
firstReqId = myHttp->get("first.com", buff); 

void requestHandler(int id, bool error) 
{ 
    if (error) 
     panic(); 
    if(id == firstReqId) { 
     process(buff); 
     secondReqId = myHttp->get("second.com", buff2); 
    } 
    if (id == secondReqId) { 
     process(buff2); 
     sock.connectToHost("server.com", "5222"); //etc 
    } 
} 

或作爲其他的解決方案,你可以巧妙地使用鎖定結構,如QMutex,並通過實現自己的禁止請求方法包裝QHTTP,這將允許在時間一個請求。但我認爲在你的情況下,第一種方法更好。