xtool/contrib/mORMot/SQLite3/Samples/26 - RESTful ORM/RestClientMain.pas

112 lines
2.5 KiB
ObjectPascal

unit RestClientMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
SynCommons,
mORMot,
mORMotHttpClient,
RESTData, StdCtrls; // data model unit, shared between server and client
type
TMainForm = class(TForm)
btnConnect: TButton;
btnGet: TButton;
btnNew: TButton;
lblNewID: TLabel;
btnSet: TButton;
mmoSet: TMemo;
mmoGet: TMemo;
edtGetID: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnConnectClick(Sender: TObject);
procedure btnGetClick(Sender: TObject);
procedure btnNewClick(Sender: TObject);
procedure btnSetClick(Sender: TObject);
protected
fModel: TSQLModel;
fClient: TSQLHttpClient;
public
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
procedure TMainForm.FormCreate(Sender: TObject);
begin
fModel := DataModel('root');
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
FreeAndNil(fClient);
FreeAndNil(fModel);
end;
procedure TMainForm.btnConnectClick(Sender: TObject);
begin
fClient := TSQLHttpClientWinHTTP.Create('localhost','888',fModel);
try
if not fClient.ServerTimeStampSynchronize then
exit;
btnConnect.Enabled := false;
btnNew.Enabled := true;
btnGet.Enabled := true;
btnSet.Enabled := true;
mmoGet.Enabled := true;
mmoSet.Enabled := true;
edtGetID.Enabled := true;
except
FreeAndNil(fClient);
end;
end;
procedure TMainForm.btnGetClick(Sender: TObject);
var ID: TID;
resp: RawUTF8;
begin
if fClient=nil then
exit;
if not TryStrToInt64(edtGetID.Text,Int64(ID)) then
exit;
if fClient.CallBackGet('blob',[],resp,TSQLNoteFile,ID)=HTTP_SUCCESS then
mmoGet.Text := UTF8ToString(resp) else
mmoGet.Text := '? not found';
end;
procedure TMainForm.btnNewClick(Sender: TObject);
var Note: TSQLNoteFile;
begin
if fClient=nil then
exit;
Note := TSQLNoteFile.Create;
try
Note.FileName := 'Test'+UInt32ToUTF8(GetTickCount64);
Note.MetaData := _ObjFast(['timestamp',GetTickCount64]);
Tag := fClient.Add(Note,true);
lblNewID.Caption := Format('Current ID=%d',[Tag]);
mmoSet.Text := Format('Bla bla %d'#13#10'%d',[Tag,GetTickCount64]);
edtGetID.Text := IntToStr(Tag);
finally
Note.Free;
end;
end;
procedure TMainForm.btnSetClick(Sender: TObject);
var resp: RawUTF8;
begin
if fClient=nil then
exit;
if fClient.CallBackPut('blob',StringToUTF8(mmoSet.Text),resp,TSQLNoteFile,Tag)=HTTP_CREATED then
mmoSet.Text := '.. saved ..';
end;
end.