Steuerung mehrerer Fensterinhalte
Übersicht

danibertBetreff: Steuerung mehrerer Fensterinhalte |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich schreibe an einem Programm, das mit einem Server kommuniziert. Das Hauptprogramm: Code: [AUSKLAPPEN] Import maxgui.drivers
Strict ' Include-Dateien einbinden Include "include/httpPost.bmx" ' Fenster anzeigen Local mainWindow:TGadget=CreateWindow("Fenstertitel", 500,500,700,450, Null, WINDOW_TITLEBAR) Local panel_Logo:TGadget=CreatePanel(0,0,700,68, mainWindow) ' Panel 1 Global panel_1:TGadget=CreatePanel(10,78,674,330, mainWindow) HideGadget panel_1 Local labelAppStart01:TGadget=CreateLabel("Programm wird gestartet. Bitte warten", 10, 120, 664, 100, panel_1, LABEL_CENTER) ' Panel 2 Global panel_2:TGadget=CreatePanel(10,78,674,330, mainWindow) HideGadget panel_2 Local labelAppStart02:TGadget=CreateLabel("Programm läuft", 10, 120, 664, 100, panel_2, LABEL_CENTER) ' Server-Verbindung Function httpSend$(srvIn00:String, srvIn01:String, srvIn02:String) Local http:THTTP = New THTTP If http.Open("localhost") Local arr:String = Trim(http.Post("/entwicklung/test1.php", ["in00", "in01", "in02"] , [srvIn00, srvIn01, srvIn02] )) Return arr End If http.Close() End Function ' Fenster-Steuerung Function setNewPage:Int(newPage:Int) ' Alle Seiten verstecken HideGadget panel_1; HideGadget panel_2 ' Angegebene Seite sichtbar machen Select newPage Case 1 ' Panel 1 ShowGadget panel_1 Case 2 ' Panel 2 ShowGadget panel_2 End Select End Function ' Programmstart setNewPage(1) Local fromServer:String = httpSend("variable 1", "variable 2", "variable 3" ) If fromServer setNewPage(2) EndIf Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE End End Select Forever Die HTTP POST Schnittstelle zum Server Code: [AUSKLAPPEN] Type Thttp
Field sock:TSocket Field stream:TStream Field host:String Field agent:String = "exThttp/1.0" Field autoClose:Int Method Open:Int(host:String, autoClose:Int = False) Self.sock = CreateTCPSocket() If ConnectSocket(Self.sock, HostIp(host), 80) Self.host = host Self.stream = CreateSocketStream(Self.sock) Self.autoClose = autoClose Return True Else Return False End If End Method Method Post:String(page:String = "", keys:String[] , values:String[] ) Local buffer:String Local data:String Local i:Int For i = 0 To keys.Length - 1 data:+UrlEncode(keys[i] ) + "=" + UrlEncode(values[i] ) + "&" Next data = Left(data, Len(data) - 1) WriteLine(stream, "POST /" + page + " HTTP/1.0~nHost: " + Self.host + "~nUser-Agent: " + Self.agent + "~nContent-Length: " + Len(data) + "~nContent-Type: application/x-www-form-urlencoded~n~n" + data) While Not Eof(stream) buffer:+ReadLine(stream) + "~n" Wend If autoClose Close() Return Left(buffer, Len(buffer) - 1) End Method Method Close() If Self.stream CloseStream(Self.stream) If Self.sock CloseSocket(Self.sock) End Method Function UrlEncode:String(url:String) Local buffer:String Local Char:Int Local i:Int For i = 1 To Len(url) Char = Asc(Mid(url, i, 1)) If(Char >= 48 And Char <= 57) Or (Char >= 65 And Char <= 90) Or (Char >= 97 And Char <= 122) Or Char = 43 Or Char = 45 Or Char = 46 Or Char = 95 buffer = buffer + Chr(Char) Else buffer = buffer + "%" + Right(Hex(Char), 2) End If Next Return buffer End Function Function UrlDecode:String(url:String) Local sHex:String = "0123456789ABCDEF" Local buffer:String Local i:Int For i = 1 To Len(url) If Mid(url, i, 1) = "%"Then buffer = buffer + Chr(Instr(sHex, Mid(url, i + 1, 1)) Shl 4 + Instr(sHex, Mid(url, i + 2, 1)) - 17) i:+2 Else buffer = buffer + Mid(url, i, 1) End If Next Return buffer End Function End Type Hierzu habe ich 2 Fragen 1.) Ich starte das Programm und rufe meine Funktion setNewPage(1) auf. Der entsprechende Inhalt soll nun angezeigt werden, bis die Kommunikation mit dem Server abgeschlossen ist. Anschließend soll Panel 2 angezeigt werden. Panel 1 wird aber nicht angezeigt. Wenn ich das Script auf dem Server zum Testen so einstelle, dass es erst nach einigen Sekunden antwortet, bleibt mein Programmfenster für diese Zet leer, obwohl der Aufruf von setNewPage(1) vor der Serverkommunikation stattfindet. Ich verstehe nicht, warum das so ist. Ich war der Meinung, das Programm wird der Reihe nach abgearbeitet..... Wie lässt sich das Problem beheben? 2.) Ich würde gerne einen Timeout einbauen, damit das Programm - wenn der Server nich antwortet - nach einigen Sekunden eine Fehlermeldung ausgibt. Ich habe hierzu schon einige Experimente mit dem Timer und auch mit While Wend-Schleifen gemacht. Irgendwie bekomme ich das nicht hin. Ich finde nicht die richtige Stelle, an der ich hier ansetzen soll. Danke im Voraus für alle Tipps |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group