xtool/contrib/mORMot/SQLite3/Samples/20 - DTO interface based se.../Project20ClientMain.pas

105 lines
2.3 KiB
ObjectPascal

unit Project20ClientMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,
SynCommons, mORMot, mORMotHttpClient,
Project20Interface;
type
TForm1 = class(TForm)
edtID: TEdit;
lblA: TLabel;
btnCall: TButton;
btnCancel: TButton;
mmoResult: TMemo;
edtNumberOfCalls: TEdit;
lbl1: TLabel;
lblTiming: TLabel;
edtServerName: TEdit;
lbl2: TLabel;
procedure btnCancelClick(Sender: TObject);
procedure btnCallClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Model: TSQLModel;
Client: TSQLRestClientURI;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{$ifndef FPC}
{$R vista.RES}
{$endif}
procedure TForm1.btnCancelClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.btnCallClick(Sender: TObject);
var id, numcalls, err, n: integer;
Timer: TPrecisionTimer;
I: IAirportService;
Airport: TDTOAirportDefinition;
begin
val(edtID.Text,id,err);
if err<>0 then begin
edtID.SetFocus;
exit;
end;
val(edtNumberOfCalls.Text,numcalls,err);
if (err<>0) or (numcalls<=0) then begin
edtNumberOfCalls.SetFocus;
exit;
end;
if Client=nil then
try
if Model=nil then
Model := TSQLModel.Create([],ROOT_NAME);
Client := TSQLHttpClient.Create(AnsiString(edtServerName.Text),'888',Model);
if not Client.ServerTimeStampSynchronize then begin
ShowMessage(UTF8ToString(Client.LastErrorMessage));
FreeAndNil(Client);
exit;
end;
Client.ServiceRegister([TypeInfo(IAirportService)],sicShared);
except
on Exception do begin
FreeAndNil(Client);
exit;
end;
end;
if not Client.Services['AirportService'].Get(I) then
exit;
Airport := TDTOAirportDefinition.Create;
try
Timer.Start;
for n := 1 to numcalls do
I.GetAirportDefinition(id,Airport);
lblTiming.Caption := Format('Total time: %s'#13'Average time: %s',
[Timer.Stop,Timer.ByCount(numcalls)]);
mmoResult.Text := UTF8ToString(ObjectToJSON(Airport,[woHumanReadable]));
finally
Airport.Free;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Client.Free;
Model.Free;
end;
end.