90 lines
2.1 KiB
ObjectPascal
90 lines
2.1 KiB
ObjectPascal
unit Unit2Static;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, StdCtrls,
|
|
SynCommons, mORMot, mORMotSQLite3, SynSQLite3Static,
|
|
mORMotHttpServer, SynCrtSock,
|
|
SampleData;
|
|
|
|
type
|
|
TForm1 = class(TForm)
|
|
Label1: TLabel;
|
|
Button1: TButton;
|
|
Label2: TLabel;
|
|
procedure Button1Click(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure FormShow(Sender: TObject);
|
|
private
|
|
public
|
|
Model: TSQLModel;
|
|
DB: TSQLRestServerDB;
|
|
Server: TSQLHttpServer;
|
|
end;
|
|
|
|
TCustomHttpServer = class(TSQLHttpServer)
|
|
protected
|
|
/// override the server response - must be thread-safe
|
|
function Request(Ctxt: THttpServerRequest): cardinal; override;
|
|
end;
|
|
|
|
|
|
var
|
|
Form1: TForm1;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
{ TForm1 }
|
|
|
|
procedure TForm1.Button1Click(Sender: TObject);
|
|
begin
|
|
Close;
|
|
end;
|
|
|
|
procedure TForm1.FormCreate(Sender: TObject);
|
|
begin
|
|
Model := CreateSampleModel;
|
|
DB := TSQLRestServerDB.Create(Model,ChangeFileExt(ExeVersion.ProgramFileName,'.db3'),true);
|
|
DB.CreateMissingTables;
|
|
Server := TCustomHttpServer.Create('8080',[DB],'+',useHttpApiRegisteringURI,32,secNone,'static');
|
|
Server.AccessControlAllowOrigin := '*'; // allow cross-site AJAX queries
|
|
end;
|
|
|
|
procedure TForm1.FormDestroy(Sender: TObject);
|
|
begin
|
|
Server.Free;
|
|
DB.Free;
|
|
Model.Free;
|
|
end;
|
|
|
|
procedure TForm1.FormShow(Sender: TObject);
|
|
begin
|
|
Label1.Caption := Caption;
|
|
end;
|
|
|
|
|
|
{ TCustomHttpServer }
|
|
|
|
function TCustomHttpServer.Request(Ctxt: THttpServerRequest): cardinal;
|
|
var FileName: TFileName;
|
|
begin
|
|
if (Ctxt.Method='GET') and IdemPChar(pointer(Ctxt.URL),'/STATIC/') and
|
|
(PosEx('..',Ctxt.URL)=0) then begin
|
|
// http.sys will send the specified file from kernel mode
|
|
FileName := ExeVersion.ProgramFilePath+'www\'+UTF8ToString(Copy(Ctxt.URL,8,maxInt));
|
|
Ctxt.OutContent := StringToUTF8(FileName);
|
|
Ctxt.OutContentType := HTTP_RESP_STATICFILE;
|
|
result := 200; // THttpApiServer.Execute will return 404 if not found
|
|
end else
|
|
// call the associated TSQLRestServer instance(s)
|
|
result := inherited Request(Ctxt);
|
|
end;
|
|
|
|
|
|
end.
|