xtool/contrib/mORMot/SQLite3/Samples/27 - CrossPlatform Clients/SmartMobileStudio/mORMotClient.pas

130 lines
3.7 KiB
ObjectPascal

/// remote access to a mORMot server using SmartMobileStudio
// - retrieved from http://localhost:888/root/wrapper/SmartMobileStudio/mORMotClient.pas
// at 2014-12-10 21:54:15 using "SmartMobileStudio.pas.mustache" template
unit mORMotClient;
{
WARNING:
This unit has been generated by a mORMot 1.18.626 server.
Any manual modification of this file may be lost after regeneration.
Synopse mORMot framework. Copyright (C) 2014 Arnaud Bouchez
Synopse Informatique - https://synopse.info
This unit is released under a MPL/GPL/LGPL tri-license,
and therefore may be freely included in any application.
This unit would work on Smart Mobile Studio 2.1.1 and later.
}
interface
uses
SmartCL.System,
System.Types,
SynCrossPlatformSpecific,
SynCrossPlatformREST;
type
/// service accessible via http://localhost:888/root/Calculator
// - this service will run in sicShared mode
// - synchronous and asynchronous methods are available, depending on use case
// - synchronous _*() methods will block the browser execution, so won't be
// appropriate for long process - on error, they may raise EServiceException
TServiceCalculator = class(TServiceClientAbstract)
public
/// will initialize an access to the remote service
constructor Create(aClient: TSQLRestClientURI); override;
procedure Add(n1: Integer; n2: Integer;
onSuccess: procedure(Result: Integer); onError: TSQLRestEvent);
function _Add(const n1: Integer; const n2: Integer): Integer;
end;
const
/// the server port, corresponding to http://localhost:888
SERVER_PORT = 888;
/// return the database Model corresponding to this server
function GetModel: TSQLModel;
/// create a TSQLRestClientHTTP instance and connect to the server
// - it will use by default port 888
// - secure connection will be established via TSQLRestServerAuthenticationDefault
// with the supplied credentials
// - request will be asynchronous, and trigger onSuccess or onError event
procedure GetClient(const aServerAddress, aUserName,aPassword: string;
onSuccess, onError: TSQLRestEvent; aServerPort: integer=SERVER_PORT);
implementation
function GetModel: TSQLModel;
begin
result := TSQLModel.Create([TSQLAuthUser,TSQLAuthGroup],'root');
end;
procedure GetClient(const aServerAddress, aUserName,aPassword: string;
onSuccess, onError: TSQLRestEvent; aServerPort: integer);
begin
var client := TSQLRestClientHTTP.Create(aServerAddress,aServerPort,GetModel,true);
client.Connect(
lambda
try
if client.ServerTimeStamp=0 then begin
if Assigned(onError) then
onError(client);
exit;
end;
if not client.SetUser(TSQLRestServerAuthenticationDefault,aUserName,aPassword) then begin
if Assigned(onError) then
onError(client);
exit;
end;
if Assigned(onSuccess) then
onSuccess(client);
except
if Assigned(onError) then
onError(client);
end;
end,
onError);
end;
{ TServiceCalculator }
constructor TServiceCalculator.Create(aClient: TSQLRestClientURI);
begin
fServiceName := 'Calculator';
fServiceURI := 'Calculator';
fInstanceImplementation := sicShared;
fContractExpected := '1FC2AE72D7E2C88D';
inherited Create(aClient);
end;
procedure TServiceCalculator.Add(n1: Integer; n2: Integer;
onSuccess: procedure(Result: Integer); onError: TSQLRestEvent);
begin
fClient.CallRemoteServiceAsynch(self,'Add',1,
[n1,n2],
lambda (res: array of Variant)
onSuccess(res[0]);
end, onError);
end;
function TServiceCalculator._Add(const n1: Integer; const n2: Integer): Integer;
begin
var res := fClient.CallRemoteServiceSynch(self,'Add',1,
[n1,n2]);
Result := res[0];
end;
end.