mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-14 14:29:14 +02:00
* Demo for simple file server
git-svn-id: trunk@35822 -
This commit is contained in:
parent
5a7a05bd3f
commit
87b6646e02
5
.gitattributes
vendored
5
.gitattributes
vendored
@ -3163,6 +3163,11 @@ packages/fcl-web/examples/session/sessiondemo.lpi svneol=native#text/plain
|
||||
packages/fcl-web/examples/session/sessiondemo.lpr svneol=native#text/plain
|
||||
packages/fcl-web/examples/session/wmsession.lfm svneol=native#text/plain
|
||||
packages/fcl-web/examples/session/wmsession.pp svneol=native#text/plain
|
||||
packages/fcl-web/examples/simpleserver/README.txt svneol=native#text/plain
|
||||
packages/fcl-web/examples/simpleserver/index.css svneol=native#text/plain
|
||||
packages/fcl-web/examples/simpleserver/index.html svneol=native#text/plain
|
||||
packages/fcl-web/examples/simpleserver/simpleserver.lpi svneol=native#text/plain
|
||||
packages/fcl-web/examples/simpleserver/simpleserver.pas svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/createusers.lpi svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/createusers.lpr svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/extgrid-json.html svneol=native#text/plain
|
||||
|
10
packages/fcl-web/examples/simpleserver/README.txt
Normal file
10
packages/fcl-web/examples/simpleserver/README.txt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
Small demo for simple file module. The server will listen on a specified
|
||||
port (default 3000) and will serve files starting from the current working
|
||||
directory.
|
||||
|
||||
Just start the server, no options, and point your browser at
|
||||
http://localhost:3000/
|
||||
|
||||
running simpleserver -h will provide some help.
|
||||
|
3
packages/fcl-web/examples/simpleserver/index.css
Normal file
3
packages/fcl-web/examples/simpleserver/index.css
Normal file
@ -0,0 +1,3 @@
|
||||
.important {
|
||||
color: red
|
||||
}
|
10
packages/fcl-web/examples/simpleserver/index.html
Normal file
10
packages/fcl-web/examples/simpleserver/index.html
Normal file
@ -0,0 +1,10 @@
|
||||
<http>
|
||||
<link rel="stylesheet" href="index.css">
|
||||
<body>
|
||||
<H1>Simple server demo</H1>
|
||||
If you see this page, it demonstrates that the simple server demo serves the
|
||||
<span class="important">index.html</span> page. <p>
|
||||
If it shows index.html in a
|
||||
different style, it means the css is loaded as well.
|
||||
</body>
|
||||
</http>
|
60
packages/fcl-web/examples/simpleserver/simpleserver.lpi
Normal file
60
packages/fcl-web/examples/simpleserver/simpleserver.lpi
Normal file
@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="10"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<MainUnit Value="0"/>
|
||||
<Title Value="simpleserver"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<VersionInfo>
|
||||
<StringTable ProductVersion=""/>
|
||||
</VersionInfo>
|
||||
<BuildModes Count="1">
|
||||
<Item1 Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<Units Count="1">
|
||||
<Unit0>
|
||||
<Filename Value="simpleserver.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit0>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<Target>
|
||||
<Filename Value="simpleserver"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
89
packages/fcl-web/examples/simpleserver/simpleserver.pas
Normal file
89
packages/fcl-web/examples/simpleserver/simpleserver.pas
Normal file
@ -0,0 +1,89 @@
|
||||
program simpleserver;
|
||||
|
||||
uses sysutils,custhttpapp, fpwebfile;
|
||||
|
||||
Type
|
||||
|
||||
{ THTTPApplication }
|
||||
|
||||
THTTPApplication = Class(TCustomHTTPApplication)
|
||||
private
|
||||
FQuiet: Boolean;
|
||||
procedure Usage(Msg: String);
|
||||
published
|
||||
procedure DoLog(EventType: TEventType; const Msg: String); override;
|
||||
Procedure DoRun; override;
|
||||
property Quiet : Boolean read FQuiet Write FQuiet;
|
||||
end;
|
||||
|
||||
Var
|
||||
Application : THTTPApplication;
|
||||
|
||||
{ THTTPApplication }
|
||||
|
||||
procedure THTTPApplication.DoLog(EventType: TEventType; const Msg: String);
|
||||
begin
|
||||
if Quiet then
|
||||
exit;
|
||||
if IsConsole then
|
||||
Writeln(FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz',Now),' [',EventType,'] ',Msg)
|
||||
else
|
||||
inherited DoLog(EventType, Msg);
|
||||
end;
|
||||
|
||||
procedure THTTPApplication.Usage(Msg : String);
|
||||
|
||||
begin
|
||||
if (Msg<>'') then
|
||||
Writeln('Error: ',Msg);
|
||||
Writeln('Usage ',ExtractFileName(ParamStr(0)),' [options] ');
|
||||
Writeln('Where options is one or more of : ');
|
||||
Writeln('-d --directory=dir Base directory from which to serve files.');
|
||||
Writeln(' Default is current working directory: ',GetCurrentDir);
|
||||
Writeln('-h --help This help text');
|
||||
Writeln('-i --indexpage=name Directory index page to use (default: index.html)');
|
||||
Writeln('-n --noindexpage Do not allow index page.');
|
||||
Writeln('-p --port=NNNN TCP/IP port to listen on (default is 3000)');
|
||||
Writeln('-q --quiet Do not write diagnostic messages');
|
||||
Halt(Ord(Msg<>''));
|
||||
end;
|
||||
|
||||
procedure THTTPApplication.DoRun;
|
||||
|
||||
Var
|
||||
S,IndexPage,D : String;
|
||||
|
||||
begin
|
||||
S:=Checkoptions('hqd:ni:p:',['help','quiet','noindexpage','directory:','port:','indexpage:']);
|
||||
if (S<>'') or HasOption('h','help') then
|
||||
usage(S);
|
||||
Quiet:=HasOption('q','quiet');
|
||||
Port:=StrToIntDef(GetOptionValue('p','port'),3000);
|
||||
D:=GetOptionValue('d','directory');
|
||||
if D='' then
|
||||
D:=GetCurrentDir;
|
||||
Log(etInfo,'Listening on port %d, serving files from directory: %s',[Port,D]);
|
||||
{$ifdef unix}
|
||||
MimeTypesFile:='/etc/mime.types';
|
||||
{$endif}
|
||||
TSimpleFileModule.BaseDir:=IncludeTrailingPathDelimiter(D);
|
||||
TSimpleFileModule.OnLog:=@Log;
|
||||
If not HasOption('n','noindexpage') then
|
||||
begin
|
||||
IndexPage:=GetOptionValue('i','indexpage');
|
||||
if IndexPage='' then
|
||||
IndexPage:='index.html';
|
||||
Log(etInfo,'Using index page %s',[IndexPage]);
|
||||
TSimpleFileModule.IndexPageName:=IndexPage;
|
||||
end;
|
||||
inherited;
|
||||
end;
|
||||
|
||||
begin
|
||||
TSimpleFileModule.RegisterDefaultRoute;
|
||||
Application:=THTTPApplication.Create(Nil);
|
||||
Application.Initialize;
|
||||
Application.Run;
|
||||
Application.Free;
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user