Witam
Próbuję stworzyć aplikację konsolową, która łączyłaby się z serwerem HTTP za pomocą ClientSocket'a. No i wszystko szłoby pięknie, gdyby nie jeden problem. A mianowicie nie wiem, jak zatrzymać wykonywanie programu aż do momentu, gdy ściągnę wszystko co potrzebuję. Mam coś takiego:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, ScktComp, Dialogs;
type
TMethods = object
procedure SocketConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure SocketRead(Sender: TObject; Socket: TCustomWinSocket);
end;
var
Methods: TMethods;
MySocket: TClientSocket;
Buffer: String;
procedure TMethods.SocketConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
ShowMessage('Udało się ;)');
Socket.SendText('GET /ver.php HTTP/1.1'+#13+#10+'Host: www.epsisoft.devtown.net'+#13+#10+#13+#10);
end;
procedure TMethods.SocketRead(Sender: TObject; Socket: TCustomWinSocket);
begin
Buffer:=Buffer+Socket.ReceiveText;
end;
begin
{ TODO -oUser -cConsole Main : Insert code here }
MySocket:=TClientSocket.Create(nil);
MySocket.Host:='www.epsisoft.devtown.net';
MySocket.Port:=80;
MySocket.OnConnect:=Methods.SocketConnect;
MySocket.OnRead:=Methods.SocketRead;
MySocket.Open;
MySocket.Free;
end.
Tutaj oczywiście Dialogs jest tylko w celach testowych. No i mam problem. Gdyż program zamyka się natychmiast po uruchomieniu, gdyż dochodzi do end. i koniec. Próbowałem zastosować coś takiego, żeby w odpowiednim miejscu ustawiać zmienną Koniec na true (w obsłudze zdarzeń), a do programu głównego dostawić
repeat Application.ProcessMessages; until Koniec;
, ale takie podeście wymaga niestety dodania unitu Forms do uses (Application jest tam zdefiniowane), a co za tym idzie zwiększenie programu do rozmiarów programu okienkowego. Czy da się to zrobić jakoś inaczej? Tak, żeby nie używać unitów VCL'a?
//Dopisane:
Żeby nie było, że nie szukałem: znalazłem trzy wątki, które w pewien sposób się wiążą z tym tematem:
http://4programmers.net/Forum/viewtopic.php?id=25449
http://4programmers.net/Forum/234211
http://4programmers.net/Forum/55287
jednak żaden z nich nie rozwiązuje mojego problemu...