xtool/contrib/mORMot/SQLite3/Samples/27 - CrossPlatform Clients/Project14ServerHttpWrapper.dpr

74 lines
2.2 KiB
ObjectPascal

/// this server will demonstrate how to publish code generation wrappers
program Project14ServerHttpWrapper;
{$APPTYPE CONSOLE}
uses
{$I SynDprUses.inc} // use FastMM4 on older Delphi, or set FPC threads
SysUtils,
Classes,
SynCommons,
SynTable,
SynLog,
mORMot,
mORMotHttpServer,
mORMotWrappers,
Project14Interface in '..\14 - Interface based services\Project14Interface.pas';
type
TServiceCalculator = class(TInterfacedObject, ICalculator)
public
function Add(n1,n2: integer): integer;
end;
function TServiceCalculator.Add(n1, n2: integer): integer;
begin
result := n1+n2;
end;
var
aModel: TSQLModel;
aServer: TSQLRestServer;
aHTTPServer: TSQLHttpServer;
url: RawUTF8;
begin
// define the log level
with TSQLLog.Family do begin
Level := LOG_VERBOSE;
//EchoToConsole := LOG_VERBOSE; // log all events to the console
end;
// create a Data Model
aModel := TSQLModel.Create([],ROOT_NAME);
try
// initialize a TObjectList-based database engine
aServer := TSQLRestServerFullMemory.Create(aModel,'test.json',{binary=}false,{auth=}false);
try
// add the http://localhost:888/root/wrapper code generation web page
AddToServerWrapperMethod(aServer,
['..\..\..\CrossPlatform\templates','..\..\..\..\CrossPlatform\templates']);
// register our ICalculator service on the server side
aServer.ServiceDefine(TServiceCalculator,[ICalculator],sicShared)
.ResultAsJSONObjectWithoutResult := true;
// launch the HTTP server
aHTTPServer := TSQLHttpServer.Create(PORT_NAME,[aServer]);
try
aHTTPServer.AccessControlAllowOrigin := '*'; // for AJAX requests to work
writeln(#10'Background server is running.'#10);
url := 'http://localhost:'+PORT_NAME+'/'+ROOT_NAME+'/wrapper';
writeln('Cross-Platform wrappers are available at: ',url);
writeln('- you may also check:');
writeln(' http://petstore.swagger.io/?url=',url,'/Swagger/mORMotClient.json.txt');
writeln(#10'Press [Enter] to close the server.'#10);
ConsoleWaitForEnterKey;
finally
aHTTPServer.Free;
end;
finally
aServer.Free;
end;
finally
aModel.Free;
end;
writeln('Server is now down');
end.