program testevnt;
(* Program to test event procedures *)
{$IFDEF FPC}{$MODE DELPHI}{$ELSE}{$INCLUDE curltest.inc}{$ENDIF}
uses Classes, sysutils, curlobj;
(*
Events cannot be standard procedures, they must be methods of an object.
So we create a "dummy" class to hold the tCurl object...
*)
type tDummy = class(tObject)
public
CurlOne:tCurl;
procedure CurlOneProgress (Sender:tObject; BytesTotal, BytesNow:longint; var bContinue:Boolean);
procedure CurlOneHeader (Sender:tObject; data:string; var bContinue:Boolean);
procedure CurlOneReceive (Sender:tObject; data:pChar; len:LongWord; var bContinue:Boolean);
procedure CurlOnePassword (Sender:tObject; const Prompt:string; var data:string; var bContinue:Boolean);
procedure CurlOneDebug (Sender:tObject; infotype:curl_infotype; data:pChar; len:LongWord; var bContinue:boolean);
procedure CurlOneTransmit (Sender:tObject; data:pChar; var len:LongWord);
constructor Create;
destructor Destroy; override;
end;
procedure tDummy.CurlOneProgress (Sender:tObject; BytesTotal, BytesNow:longint; var bContinue:Boolean);
begin
WriteLn('Progress: ', BytesNow, ' of ', BytesTotal);
end;
procedure tDummy.CurlOneHeader (Sender:tObject; data:string; var bContinue:Boolean);
begin
WriteLn('OnHeader: ', data);
end;
procedure tDummy.CurlOneReceive (Sender:tObject; data:pChar; len:LongWord; var bContinue:Boolean);
begin
WriteLn('OnReceive: ', len, ' bytes');
with ( Sender as tCurl ) do TFileStream(OutputStream).Write(pChar(data)[0], len);
end;
procedure tDummy.CurlOnePassword (Sender:tObject; const Prompt:string; var data:string; var bContinue:Boolean);
begin
WriteLn( 'OnPassword: ');
Write(Prompt);
ReadLn(data);
end;
procedure tDummy.CurlOneTransmit (Sender:tObject; data:pChar; var len:LongWord);
begin
WriteLn('CurlOneTransmit');
end;
procedure tDummy.CurlOneDebug (Sender:tObject; infotype:curl_infotype; data:pChar; len:LongWord; var bContinue:boolean);
begin
case InfoType of
CURLINFO_TEXT : WriteLn('OnDebug (info): ', copy(data, 1, len));
CURLINFO_HEADER_OUT: begin
WriteLn('OnDebug: Sending headers...');
Write(copy(data, 1, len)) ;
end;
end;
end;
constructor tDummy.Create;
begin
inherited Create;
CurlOne:=tCurl.Create(nil);
CurlOne.OnProgress := CurlOneProgress;
CurlOne.OnReceive := CurlOneReceive;
CurlOne.OnHeader := CurlOneHeader;
CurlOne.OnDebug := CurlOneDebug;
CurlOne.OnTransmit := CurlOneTransmit; // Not used in this example
end;
destructor tDummy.Destroy;
begin
CurlOne.Free;
inherited Destroy;
end;
var
MyDummy:tDummy;
const
TEMP_FILE = 'testevnt.tmp';
begin
MyDummy:=tDummy.Create;
with MyDummy.CurlOne do begin
if ( ParamCount > 0 ) then URL:=ParamStr(1) else URL:='http://www.aol.com';
FollowLocation:=True;
(*
It would be simpler to just say "OutputFile:=TEMP_FILE"
but I am using a TFileStream here to demonstrate
how to stream the received data to a file....
*)
OutputStream:=TFileStream.Create(TEMP_FILE, fmOpenWrite or fmCreate);
if Perform then begin
WriteLn('Perform: received ', SizeDownload, ' bytes.') ;
TFileStream(OutputStream).Free;
WriteLn('File saved as "', TEMP_FILE, '"');
end else begin
TFileStream(OutputStream).Free;
DeleteFile(TEMP_FILE);
WriteLn('Perform: ', ErrorString);
end;
end;
MyDummy.Free;
end.