Seite 1 von 1

[closed]warten, bis Http Response zurück kommt

Verfasst: 25. Februar 2008 18:22
von RED Squirrel
hi.

ich versuche, eine login Funktion zu schreiben, die mir entweder true oder false zurück gibt, abhängig von einem HTTP Response wert.

Das sind mein versuche:

Code: Alles auswählen

bool redaxo::login(QString uname, QString upassword)
{
...

connect(loginHTTP, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)),this, SLOT(readResponseHeader(const QHttpResponseHeader &)));

	while(al < 3)
	{
		if(httpStatus == 302)
			return true;
		sleep(al);
		al++;
	}
	
	return false;
}


void redaxo::readResponseHeader(const QHttpResponseHeader &responseHeader)
{
		QString cookie = responseHeader.value("set-cookie");
		cookie = cookie.section(";", 0, 0);    

		if(cookie != "")		
			rexCookie = cookie;
		
		httpStatus = responseHeader.statusCode();
}
nun wird aber in httpStatus nichts hineingeschrieben... und das ganze mit einem sleep zu lösen ist auch nicht grad schön.

Das Hauptproblem ist aber, dass im Slot readResponseHeader, der Variable httpStatus kein Wert zugewiesen werden kann.

vielen dank
RED

Verfasst: 25. Februar 2008 21:39
von upsala
Tu dir einen Gefallen, und beschäftige dich dringend mit Signal, Slots und Eventhandling in Qt.

Verfasst: 25. Februar 2008 22:59
von RED Squirrel
liegt es vielleicht daran, dass sleep() das ganze Programm anhält, und somit der header gar nicht kommen kann? Oder liegt es, obwohl das anscheinend nirgendwo steht daran, dass Slots nicht in QObjects schreiben können? Oder leigt das Problem irgendwo anders?

Ich beschäftige mich ja logischerweise mit allen Problemen, die auftreten, aber eine kleine Hilfe währe schon nett.

Ich hab in dem Zusammenhang Signals und SLots weiter versucht zu verstehen, aber außer den zwei oben genannten Möglichkeiten, fällt mir nichts ein.

Würd mich freuen, wenn du mir beim Lernen helfen kannst

lg.
RED

Verfasst: 26. Februar 2008 09:08
von upsala
Da beide in der gleichen Klasse sind - wo ist das Problem?
Wie gesagt - ich glaube dein grundsätzliches Verständnis fehlt hier etwas. -> Ich stosse eine Aktion an, connecte mich mit dem result, gehe wieder in die Eventloop damit die GUI benutzbar bleibt. Wenn die Aktion fertig ist bearbeite ich die erzeugten Daten weiter.
Mit sleep hältst du das gesamte Programm an, wann soll denn dann noch die Event-Loop laufen?

Und wenn du nicht den Diskussions-Thread gewechselt hättest, obwohl das Thema gleich geblieben ist, würden dir vielleicht auch mehr Leute helfen.

Verfasst: 27. Februar 2008 09:08
von RED Squirrel
sry, ich dachte, mein Problem lag an meinem SLOT, und nicht an dem loop. Tut mir led. ich schließ diesen Tread mal.