80 lines
2.3 KiB
ObjectPascal
80 lines
2.3 KiB
ObjectPascal
/// this server will use TSQLRestServerFullMemory kind of in-memory server
|
|
program Project20ServerInMemory;
|
|
|
|
{$APPTYPE CONSOLE}
|
|
|
|
// first line of uses clause must be {$I SynDprUses.inc}
|
|
uses
|
|
{$I SynDprUses.inc}
|
|
SysUtils,
|
|
Classes,
|
|
SynCommons,
|
|
SynTable,
|
|
SynLog,
|
|
mORMot,
|
|
mORMotHttpServer,
|
|
Project20Interface;
|
|
|
|
type
|
|
TAirportService = class(TInterfacedObject, IAirportService)
|
|
public
|
|
procedure GetAirportDefinition(const AirPortID: integer; out Definition: TDTOAirportDefinition);
|
|
end;
|
|
|
|
|
|
{ TAirportService }
|
|
|
|
procedure TAirportService.GetAirportDefinition(const AirPortID: integer;
|
|
out Definition: TDTOAirportDefinition);
|
|
begin
|
|
// create an object from static data
|
|
// (real application may use database and complex code to retrieve the values)
|
|
with Definition.Airport.Add do begin
|
|
Location := 'LAX';
|
|
Terminal := TRawUTF8DynArrayFrom(['terminalA', 'terminalB', 'terminalC']);
|
|
Gate := TRawUTF8DynArrayFrom(['gate1', 'gate2', 'gate3', 'gate4', 'gate5']);
|
|
BHS := 'Siemens';
|
|
DCS := 'Altiea';
|
|
end;
|
|
with Definition.Airline.Add do begin
|
|
CX := TRawUTF8DynArrayFrom(['B777', 'B737', 'A380', 'A320']);
|
|
QR := TRawUTF8DynArrayFrom(['A319', 'A380', 'B787']);
|
|
ET := '380';
|
|
SQ := 'A320';
|
|
end;
|
|
Definition.GroundHandler := TRawUTF8DynArrayFrom(['Swissport','SATS','Wings','TollData']);
|
|
end;
|
|
|
|
var
|
|
aModel: TSQLModel;
|
|
aDB: TSQLRestServer;
|
|
aServer: TSQLHttpServer;
|
|
begin
|
|
// set the logs level to only important events (reduce .log size)
|
|
TSQLLog.Family.Level := LOG_STACKTRACE+[sllInfo,sllServer];
|
|
// initialize the ORM data model
|
|
aModel := TSQLModel.Create([],ROOT_NAME);
|
|
try
|
|
// create a fast in-memory ORM server
|
|
aDB := TSQLRestServerFullMemory.Create(aModel,'test.json',false,false);
|
|
try
|
|
// register our TAirportServer implementation
|
|
aDB.ServiceRegister(TAirportService,[TypeInfo(IAirportService)],sicShared);
|
|
// launch the HTTP server
|
|
aServer := TSQLHttpServer.Create(PORT_NAME,[aDB],'+',useHttpApiRegisteringURI);
|
|
try
|
|
aServer.AccessControlAllowOrigin := '*'; // allow cross-site AJAX queries
|
|
writeln('Background server is running'#10);
|
|
write('Press [Enter] to close the server.');
|
|
ConsoleWaitForEnterKey;
|
|
finally
|
|
aServer.Free;
|
|
end;
|
|
finally
|
|
aDB.Free;
|
|
end;
|
|
finally
|
|
aModel.Free;
|
|
end;
|
|
end.
|