2010-09-26 5 views
1

Je travaille sur une classe qui implémentera un client pour un certain protocole de messagerie instantanée.
Je dois d'abord faire une requête HTTP, puis lire les données et faire une autre requête HTTP avec les données traitées reçues de la première requête et seulement après la deuxième requête je peux ouvrir une socket tcp au serveur. Quelle est la meilleure façon (meilleure façon QT?) D'y arriver car je n'ai pas trouvé de moyen de bloquer jusqu'à ce que la requête HTTP soit terminée. J'envisageais d'utiliser libcurl pour cette partie, mais il me semble que c'est une exagération d'utiliser une autre lib.Téléchargement Qt et HTTP

Répondre

1

QHttp envoie un ensemble de signaux pour notifier l'état d'une demande. Vous pouvez par exemple connecter le signal requestFinished() à un emplacement qui le traitera et démarrer votre seconde requête.

Idée en pseudo-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 
    } 
} 

Ou comme une autre solution, vous pouvez intelligemment utiliser les structures de verrouillage telles que QMutex et envelopper QHttp en mettant en œuvre votre propre méthode de demande de blocage, qui permettra à une demande à la fois. Mais je pense que dans votre cas, la première approche est meilleure.