/// 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.