├── .gitattributes
├── .gitignore
├── HTTP.HTMLBuild.pas
├── HTTP.Server.pas
├── LICENSE
├── MiniWebServer.dpr
├── MiniWebServer.dproj
├── MiniWebServer.res
├── MiniWebServerGroup.groupproj
├── MiniWebServer_Attrib.dpr
├── MiniWebServer_Attrib.dproj
├── MiniWebServer_Attrib.res
├── README.md
├── Sample
├── StressTest
│ ├── StressTest.dpr
│ ├── StressTest.dproj
│ └── StressTest.res
└── WMS.OWM.pas
├── Tester
├── GetTester.dpr
├── GetTester.dproj
└── GetTester.res
└── Win32
└── Debug
└── www
└── favicon.ico
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Uncomment these types if you want even more clean repository. But be careful.
2 | # It can make harm to an existing project source. Read explanations below.
3 | #
4 | # Resource files are binaries containing manifest, project icon and version info.
5 | # They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files.
6 | #*.res
7 | #
8 | # Type library file (binary). In old Delphi versions it should be stored.
9 | # Since Delphi 2009 it is produced from .ridl file and can safely be ignored.
10 | #*.tlb
11 | #
12 | # Diagram Portfolio file. Used by the diagram editor up to Delphi 7.
13 | # Uncomment this if you are not using diagrams or use newer Delphi version.
14 | #*.ddp
15 | #
16 | # Visual LiveBindings file. Added in Delphi XE2.
17 | # Uncomment this if you are not using LiveBindings Designer.
18 | #*.vlb
19 | #
20 | # Deployment Manager configuration file for your project. Added in Delphi XE2.
21 | # Uncomment this if it is not mobile development and you do not use remote debug feature.
22 | #*.deployproj
23 | #
24 | # C++ object files produced when C/C++ Output file generation is configured.
25 | # Uncomment this if you are not using external objects (zlib library for example).
26 | #*.obj
27 | #
28 |
29 | # Delphi compiler-generated binaries (safe to delete)
30 | *.exe
31 | *.dll
32 | *.bpl
33 | *.bpi
34 | *.dcp
35 | *.so
36 | *.apk
37 | *.drc
38 | *.map
39 | *.dres
40 | *.rsm
41 | *.tds
42 | *.dcu
43 | *.lib
44 | *.a
45 | *.o
46 | *.ocx
47 |
48 | # Delphi autogenerated files (duplicated info)
49 | *.cfg
50 | *.hpp
51 | *Resource.rc
52 |
53 | # Delphi local files (user-specific info)
54 | *.local
55 | *.identcache
56 | *.projdata
57 | *.tvsconfig
58 | *.dsk
59 |
60 | # Delphi history and backups
61 | __history/
62 | __recovery/
63 | Win32/
64 | *.~*
65 |
66 | # Castalia statistics file (since XE7 Castalia is distributed with Delphi)
67 | *.stat
68 |
69 | # Boss dependency manager vendor folder https://github.com/HashLoad/boss
70 | modules/
71 |
--------------------------------------------------------------------------------
/HTTP.HTMLBuild.pas:
--------------------------------------------------------------------------------
1 | unit HTTP.HTMLBuild;
2 |
3 | interface
4 |
5 | uses
6 | System.Classes, System.SysUtils;
7 |
8 | type
9 | TDocSection = class(TStringList)
10 | procedure AddTagSection(const Tag: string; Lines: TArray);
11 | end;
12 |
13 | IHTMLBuilder = interface
14 | function Title(const Value: string): IHTMLBuilder;
15 | function HTML: string;
16 | function Head(const Tag: string; Lines: TArray): IHTMLBuilder; overload;
17 | function Body(const Tag: string; Lines: TArray): IHTMLBuilder; overload;
18 | function Doc(const Tag: string; Lines: TArray): IHTMLBuilder; overload;
19 | function Head(Lines: TArray): IHTMLBuilder; overload;
20 | function Body(Lines: TArray): IHTMLBuilder; overload;
21 | function Doc(Lines: TArray): IHTMLBuilder; overload;
22 | function Head(const Value: string): IHTMLBuilder; overload;
23 | function Body(const Value: string): IHTMLBuilder; overload;
24 | function Doc(const Value: string): IHTMLBuilder; overload;
25 | end;
26 |
27 | HTMLBuilder = class(TInterfacedObject, IHTMLBuilder)
28 | private
29 | FHead: TDocSection;
30 | FBody: TDocSection;
31 | FLines: TDocSection;
32 | public
33 | class function Build: IHTMLBuilder;
34 | function HTML: string;
35 | function Body(const Tag: string; Lines: TArray): IHTMLBuilder; overload;
36 | function Body(const Value: string): IHTMLBuilder; overload;
37 | function Body(Lines: TArray): IHTMLBuilder; overload;
38 | function Doc(const Tag: string; Lines: TArray): IHTMLBuilder; overload;
39 | function Doc(Lines: TArray): IHTMLBuilder; overload;
40 | function Doc(const Value: string): IHTMLBuilder; overload;
41 | function Head(const Tag: string; Lines: TArray): IHTMLBuilder; overload;
42 | function Head(Lines: TArray): IHTMLBuilder; overload;
43 | function Head(const Value: string): IHTMLBuilder; overload;
44 | function Title(const Value: string): IHTMLBuilder;
45 | constructor Create;
46 | destructor Destroy; override;
47 | end;
48 |
49 | function OpenTag(const Tag: string): string;
50 |
51 | function CloseTag(const Tag: string): string;
52 |
53 | implementation
54 |
55 | function OpenTag(const Tag: string): string;
56 | begin
57 | Result := Format('<%s>', [Tag]);
58 | end;
59 |
60 | function CloseTag(const Tag: string): string;
61 | begin
62 | Result := Format('%s>', [Tag]);
63 | end;
64 |
65 | { HTMLBuilder }
66 |
67 | class function HTMLBuilder.Build: IHTMLBuilder;
68 | begin
69 | Result := HTMLBuilder.Create;
70 | end;
71 |
72 | constructor HTMLBuilder.Create;
73 | begin
74 | inherited;
75 | FHead := TDocSection.Create;
76 | FBody := TDocSection.Create;
77 | FLines := TDocSection.Create;
78 | end;
79 |
80 | destructor HTMLBuilder.Destroy;
81 | begin
82 | FHead.Free;
83 | FBody.Free;
84 | FLines.Free;
85 | inherited;
86 | end;
87 |
88 | function HTMLBuilder.Body(const Value: string): IHTMLBuilder;
89 | begin
90 | FBody.Add(Value);
91 | Result := Self;
92 | end;
93 |
94 | function HTMLBuilder.Doc(const Value: string): IHTMLBuilder;
95 | begin
96 | FLines.Add(Value);
97 | Result := Self;
98 | end;
99 |
100 | function HTMLBuilder.Head(const Value: string): IHTMLBuilder;
101 | begin
102 | FHead.Add(Value);
103 | Result := Self;
104 | end;
105 |
106 | function HTMLBuilder.Body(Lines: TArray): IHTMLBuilder;
107 | begin
108 | FBody.AddStrings(Lines);
109 | Result := Self;
110 | end;
111 |
112 | function HTMLBuilder.Doc(Lines: TArray): IHTMLBuilder;
113 | begin
114 | FLines.AddStrings(Lines);
115 | Result := Self;
116 | end;
117 |
118 | function HTMLBuilder.Head(Lines: TArray): IHTMLBuilder;
119 | begin
120 | FHead.AddStrings(Lines);
121 | Result := Self;
122 | end;
123 |
124 | function HTMLBuilder.Doc(const Tag: string; Lines: TArray): IHTMLBuilder;
125 | begin
126 | FLines.AddTagSection(Tag, Lines);
127 | Result := Self;
128 | end;
129 |
130 | function HTMLBuilder.Head(const Tag: string; Lines: TArray): IHTMLBuilder;
131 | begin
132 | FHead.AddTagSection(Tag, Lines);
133 | Result := Self;
134 | end;
135 |
136 | function HTMLBuilder.Body(const Tag: string; Lines: TArray): IHTMLBuilder;
137 | begin
138 | FBody.AddTagSection(Tag, Lines);
139 | Result := Self;
140 | end;
141 |
142 | function HTMLBuilder.HTML: string;
143 | begin
144 | FLines.Insert(0, '');
145 | if FHead.Count > 0 then
146 | FLines.AddTagSection('head', FHead.ToStringArray);
147 | if FBody.Count > 0 then
148 | FLines.AddTagSection('body', FBody.ToStringArray);
149 | FLines.Add('');
150 | Result := FLines.Text;
151 | end;
152 |
153 | function HTMLBuilder.Title(const Value: string): IHTMLBuilder;
154 | begin
155 | Result := Head('title', [Value]);
156 | end;
157 |
158 | { TDocSection }
159 |
160 | procedure TDocSection.AddTagSection(const Tag: string; Lines: TArray);
161 | begin
162 | Add(OpenTag(Tag));
163 | AddStrings(Lines);
164 | Add(CloseTag(Tag));
165 | end;
166 |
167 | end.
168 |
169 |
--------------------------------------------------------------------------------
/HTTP.Server.pas:
--------------------------------------------------------------------------------
1 | unit HTTP.Server;
2 |
3 | interface
4 |
5 | uses
6 | System.Classes, System.SysUtils, System.Threading, IdContext, System.Rtti,
7 | IdCustomHTTPServer, IdHTTPServer, System.IOUtils, System.Generics.Collections,
8 | System.JSON;
9 |
10 | type
11 | TRequest = TIdHTTPRequestInfo;
12 |
13 | TRequestHelper = class helper for TRequest
14 | public
15 | function IsHead: Boolean;
16 | function IsGet: Boolean;
17 | function IsPost: Boolean;
18 | function IsDelete: Boolean;
19 | function IsPut: Boolean;
20 | function IsTrace: Boolean;
21 | function IsOption: Boolean;
22 | end;
23 |
24 | TResponse = TIdHTTPResponseInfo;
25 |
26 | TResponseHelper = class helper for TResponse
27 | public
28 | procedure Json(const Text: string; Code: Integer = 200); overload;
29 | procedure Json(const JSONValue: TJSONValue; Code: Integer = 200); overload;
30 | procedure Json(const Obj: TObject; Code: Integer = 200); overload;
31 | procedure AsFile(const FileName: string; Code: Integer = 200);
32 | end;
33 |
34 | TOnRequest = reference to procedure(Request: TRequest; Response: TResponse);
35 |
36 | TOnResponsePlainText = reference to procedure(var Response: string; var Code: Word);
37 |
38 | TOnRequestProc = procedure(Request: TRequest; Response: TResponse) of object;
39 |
40 | THTTPCommand = (HEAD, GET, POST, DELETE, PUT, TRACE, OPTION);
41 |
42 | THTTPCommands = set of THTTPCommand;
43 |
44 | THTTPCommandTypes = set of THTTPCommandType;
45 |
46 | THTTPCommandsHelper = record helper for THTTPCommands
47 | function ToHTTPCommandTypes: THTTPCommandTypes;
48 | end;
49 |
50 | TRoute = class
51 | URI: string;
52 | Method: THTTPCommandTypes;
53 | function CheckURI(Request: TRequest): Boolean;
54 | constructor Create; overload;
55 | constructor Create(const URI: string); overload;
56 | constructor Create(Method: THTTPCommandTypes; const URI: string); overload;
57 | procedure Execute(Request: TRequest; Response: TResponse); virtual; abstract;
58 | public
59 | end;
60 |
61 | TRouteFull = class(TRoute)
62 | protected
63 | Proc: TOnRequest;
64 | public
65 | constructor Create(const URI: string; Proc: TOnRequest); overload;
66 | constructor Create(Method: THTTPCommandTypes; const URI: string; Proc: TOnRequest); overload;
67 | procedure Execute(Request: TRequest; Response: TResponse); override;
68 | end;
69 |
70 | TRoutePlaiText = class(TRoute)
71 | protected
72 | Proc: TOnResponsePlainText;
73 | public
74 | constructor Create(const URI: string; Proc: TOnResponsePlainText); overload;
75 | constructor Create(Method: THTTPCommandTypes; const URI: string; Proc: TOnResponsePlainText); overload;
76 | procedure Execute(Request: TRequest; Response: TResponse); override;
77 | end;
78 |
79 | RouteMethod = class(TCustomAttribute)
80 | private
81 | URI: string;
82 | Method: THTTPCommands;
83 | public
84 | constructor Create(const URI: string; Method: THTTPCommands = []);
85 | end;
86 |
87 | TRoutes = class(TObjectList)
88 | end;
89 |
90 | TOnServerWork = reference to procedure(var Stop: Boolean);
91 |
92 | TOnServerErrorBind = reference to procedure;
93 |
94 | THTTPServer = class(TComponent)
95 | private
96 | FRoutes: TRoutes;
97 | FContentPath: string;
98 | Instance: TidHTTPServer;
99 | FAutoFileServer: Boolean;
100 | function ProcRequest(Request: TRequest; Response: TResponse): Boolean;
101 | procedure FillRoutes;
102 | procedure SetAutoFileServer(const Value: Boolean);
103 | protected
104 | procedure DoCommand(AContext: TIdContext; Request: TRequest; Response: TResponse);
105 | function GetFilePath(const FileName: string): string;
106 | public
107 | constructor Create; reintroduce; overload;
108 | constructor Create(AOwner: TComponent); overload; override;
109 | destructor Destroy; override;
110 | procedure AddMimeType(const Ext, MIMEType: string);
111 | procedure Run(const Ports: TArray = []); overload;
112 | procedure RunSync(const Port: Word);
113 | procedure Route(const URI: string; Proc: TOnRequest); overload;
114 | procedure Route(Method: THTTPCommands; const URI: string; Proc: TOnRequest); overload;
115 | procedure Route(Method: THTTPCommands; const URI: string; Proc: TOnResponsePlainText); overload;
116 | procedure Route(const URI: string; Proc: TOnResponsePlainText); overload;
117 | procedure Route(Method: THTTPCommands; const URI: string; Proc: TRttiMethod); overload;
118 | property ContentPath: string read FContentPath write FContentPath;
119 | property AutoFileServer: Boolean read FAutoFileServer write SetAutoFileServer;
120 | end;
121 |
122 | implementation
123 |
124 | uses
125 | REST.Json;
126 |
127 | procedure THTTPServer.AddMimeType(const Ext, MIMEType: string);
128 | begin
129 | Instance.MIMETable.AddMimeType(Ext, MIMEType);
130 | end;
131 |
132 | constructor THTTPServer.Create;
133 | begin
134 | Create(nil);
135 | end;
136 |
137 | constructor THTTPServer.Create(AOwner: TComponent);
138 | begin
139 | inherited Create(AOwner);
140 | FAutoFileServer := False;
141 | FContentPath := 'www';
142 | FRoutes := TRoutes.Create;
143 | Instance := TidHTTPServer.Create(nil);
144 | Instance.OnCommandGet := DoCommand;
145 | Instance.OnCommandOther := DoCommand;
146 | Instance.MIMETable.BuildCache;
147 | Instance.MIMETable.AddMimeType('wasm', 'application/wasm');
148 | FillRoutes;
149 | end;
150 |
151 | destructor THTTPServer.Destroy;
152 | begin
153 | FRoutes.Free;
154 | Instance.Free;
155 | inherited;
156 | end;
157 |
158 | procedure THTTPServer.FillRoutes;
159 | var
160 | Context: TRttiContext;
161 | begin
162 | for var Method in Context.GetType(ClassInfo).GetMethods do
163 | for var Attr in Method.GetAttributes do
164 | if Attr is RouteMethod then
165 | Route(RouteMethod(Attr).Method, RouteMethod(Attr).URI, Method);
166 | end;
167 |
168 | procedure THTTPServer.DoCommand(AContext: TIdContext; Request: TRequest; Response: TResponse);
169 | begin
170 | //Writeln(Request.RemoteIP, ' ', Request.Command, ' ', Request.URI, ' ', Request.QueryParams, ' ', Request.Range);
171 | if FAutoFileServer and (Request.CommandType in [hcGET, hcHEAD]) then
172 | begin
173 | var Path := Request.URI;
174 | if TFile.Exists(GetFilePath(Path)) then
175 | begin
176 | Response.AsFile(GetFilePath(Path));
177 | Exit;
178 | end;
179 | end;
180 | if not ProcRequest(Request, Response) then
181 | Response.ResponseNo := 404;
182 | end;
183 |
184 | function THTTPServer.GetFilePath(const FileName: string): string;
185 | begin
186 | Result := TPath.Combine(FContentPath, FileName.TrimLeft(['/']));
187 | end;
188 |
189 | function THTTPServer.ProcRequest(Request: TRequest; Response: TResponse): Boolean;
190 | begin
191 | for var Route in FRoutes do
192 | if Route.CheckURI(Request) then
193 | begin
194 | Route.Execute(Request, Response);
195 | Exit(True);
196 | end;
197 | Result := False;
198 | end;
199 |
200 | procedure THTTPServer.Route(Method: THTTPCommands; const URI: string; Proc: TRttiMethod);
201 | begin
202 | var LMethod: TMethod;
203 | LMethod.Code := Proc.CodeAddress;
204 | LMethod.Data := Self;
205 | FRoutes.Add(TRouteFull.Create(Method.ToHTTPCommandTypes, URI, TOnRequestProc(LMethod)));
206 | end;
207 |
208 | procedure THTTPServer.Route(const URI: string; Proc: TOnResponsePlainText);
209 | begin
210 | FRoutes.Add(TRoutePlaiText.Create([], URI, Proc));
211 | end;
212 |
213 | procedure THTTPServer.Route(Method: THTTPCommands; const URI: string; Proc: TOnResponsePlainText);
214 | begin
215 | FRoutes.Add(TRoutePlaiText.Create(Method.ToHTTPCommandTypes, URI, Proc));
216 | end;
217 |
218 | procedure THTTPServer.Route(Method: THTTPCommands; const URI: string; Proc: TOnRequest);
219 | begin
220 | FRoutes.Add(TRouteFull.Create(Method.ToHTTPCommandTypes, URI, Proc));
221 | end;
222 |
223 | procedure THTTPServer.Route(const URI: string; Proc: TOnRequest);
224 | begin
225 | Route([], URI, Proc);
226 | end;
227 |
228 | procedure THTTPServer.RunSync(const Port: Word);
229 | begin
230 | Instance.Bindings.Add.Port := Port;
231 | Instance.Active := True;
232 | end;
233 |
234 | procedure THTTPServer.Run(const Ports: TArray);
235 | begin
236 | var command: string;
237 | Writeln('Starting...');
238 | repeat
239 | try
240 | TTask.Run(
241 | procedure
242 | begin
243 | for var Port in Ports do
244 | if Port <> 0 then
245 | Instance.Bindings.Add.Port := Port;
246 | Instance.Active := True;
247 | end);
248 | Writeln('Started');
249 | repeat
250 | Readln(command)
251 | until command = 'quit';
252 | except
253 | on E: Exception do
254 | begin
255 | Writeln(E.ClassName + ': ' + E.Message);
256 | Sleep(1000);
257 | Writeln('Restaring...');
258 | end;
259 | end;
260 | until command = 'quit';
261 | end;
262 |
263 | procedure THTTPServer.SetAutoFileServer(const Value: Boolean);
264 | begin
265 | FAutoFileServer := Value;
266 | end;
267 |
268 | { RouteMethod }
269 |
270 | constructor RouteMethod.Create(const URI: string; Method: THTTPCommands);
271 | begin
272 | inherited Create;
273 | Self.URI := URI;
274 | Self.Method := Method;
275 | end;
276 |
277 | { TResponseHelper }
278 |
279 | procedure TResponseHelper.Json(const Text: string; Code: Integer);
280 | begin
281 | ContentText := Text;
282 | ContentType := 'application/json';
283 | ResponseNo := Code;
284 | end;
285 |
286 | procedure TResponseHelper.Json(const JSONValue: TJSONValue; Code: Integer);
287 | begin
288 | try
289 | Json(JSONValue.ToJSON, Code);
290 | finally
291 | JSONValue.Free;
292 | end;
293 | end;
294 |
295 | procedure TResponseHelper.AsFile(const FileName: string; Code: Integer);
296 | begin
297 | ContentType := HTTPServer.MIMETable.GetFileMIMEType(FileName);
298 | //ContentLength := TFile.GetSize(FileName);
299 | ContentStream := TFileStream.Create(FileName, fmShareDenyWrite);
300 | ResponseNo := Code;
301 | end;
302 |
303 | procedure TResponseHelper.Json(const Obj: TObject; Code: Integer);
304 | begin
305 | Json(TJson.ObjectToJsonString(Obj), Code);
306 | end;
307 |
308 | { TRequestHelper }
309 |
310 | function TRequestHelper.IsDelete: Boolean;
311 | begin
312 | Result := CommandType = hcDELETE;
313 | end;
314 |
315 | function TRequestHelper.IsGet: Boolean;
316 | begin
317 | Result := CommandType = hcGET;
318 | end;
319 |
320 | function TRequestHelper.IsHead: Boolean;
321 | begin
322 | Result := CommandType = hcHEAD;
323 | end;
324 |
325 | function TRequestHelper.IsOption: Boolean;
326 | begin
327 | Result := CommandType = hcOPTION;
328 | end;
329 |
330 | function TRequestHelper.IsPost: Boolean;
331 | begin
332 | Result := CommandType = hcPOST;
333 | end;
334 |
335 | function TRequestHelper.IsPut: Boolean;
336 | begin
337 | Result := CommandType = hcPUT;
338 | end;
339 |
340 | function TRequestHelper.IsTrace: Boolean;
341 | begin
342 | Result := CommandType = hcTRACE;
343 | end;
344 |
345 | { THTTPCommandsHelper }
346 |
347 | function THTTPCommandsHelper.ToHTTPCommandTypes: THTTPCommandTypes;
348 | begin
349 | if GET in Self then
350 | Include(Result, hcGET);
351 | if HEAD in Self then
352 | Include(Result, hcHEAD);
353 | if POST in Self then
354 | Include(Result, hcPOST);
355 | if DELETE in Self then
356 | Include(Result, hcDELETE);
357 | if PUT in Self then
358 | Include(Result, hcPUT);
359 | if TRACE in Self then
360 | Include(Result, hcTRACE);
361 | if OPTION in Self then
362 | Include(Result, hcOPTION);
363 | end;
364 |
365 | { TRoute }
366 |
367 | function TRoute.CheckURI(Request: TRequest): Boolean;
368 | begin
369 | Result := ((Method = []) or (Request.CommandType in Method)) and (Request.URI = URI);
370 | end;
371 |
372 | constructor TRoute.Create(const URI: string);
373 | begin
374 | Create([], URI);
375 | end;
376 |
377 | constructor TRoute.Create(Method: THTTPCommandTypes; const URI: string);
378 | begin
379 | inherited Create;
380 | Self.Method := Method;
381 | Self.URI := URI;
382 | end;
383 |
384 | constructor TRoute.Create;
385 | begin
386 | inherited;
387 | Method := [];
388 | URI := '';
389 | end;
390 |
391 | { TRouteFull }
392 |
393 | constructor TRouteFull.Create(const URI: string; Proc: TOnRequest);
394 | begin
395 | inherited Create(URI);
396 | Self.Proc := Proc;
397 | end;
398 |
399 | constructor TRouteFull.Create(Method: THTTPCommandTypes; const URI: string; Proc: TOnRequest);
400 | begin
401 | inherited Create(Method, URI);
402 | Self.Proc := Proc;
403 | end;
404 |
405 | procedure TRouteFull.Execute(Request: TRequest; Response: TResponse);
406 | begin
407 | Proc(Request, Response);
408 | end;
409 |
410 | { TRoutePlaiText }
411 |
412 | constructor TRoutePlaiText.Create(const URI: string; Proc: TOnResponsePlainText);
413 | begin
414 | inherited Create(URI);
415 | Self.Proc := Proc;
416 | end;
417 |
418 | constructor TRoutePlaiText.Create(Method: THTTPCommandTypes; const URI: string; Proc: TOnResponsePlainText);
419 | begin
420 | inherited Create(Method, URI);
421 | Self.Proc := Proc;
422 | end;
423 |
424 | procedure TRoutePlaiText.Execute(Request: TRequest; Response: TResponse);
425 | var
426 | ResponseText: string;
427 | ResponseCode: Word;
428 | begin
429 | ResponseCode := 200;
430 | Proc(ResponseText, ResponseCode);
431 | Response.ContentText := ResponseText;
432 | Response.ResponseNo := ResponseCode;
433 | end;
434 |
435 | end.
436 |
437 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 HemulGM
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/MiniWebServer.dpr:
--------------------------------------------------------------------------------
1 | program MiniWebServer;
2 |
3 | uses
4 | HTTP.Server in 'HTTP.Server.pas',
5 | WMS.OWM in 'Sample\WMS.OWM.pas';
6 |
7 | begin
8 | var Server := THTTPServer.Create;
9 | try
10 | Server.Route('/weather', GetWeather);
11 | Server.Run([80, 8080, 9090]);
12 | finally
13 | Server.Free;
14 | end;
15 | end.
16 |
17 |
--------------------------------------------------------------------------------
/MiniWebServer.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {32D58A95-5F37-453A-A619-A0D93C2AD6D9}
4 | 19.2
5 | None
6 | True
7 | Debug
8 | Win32
9 | 1
10 | Console
11 | MiniWebServer.dpr
12 |
13 |
14 | true
15 |
16 |
17 | true
18 | Base
19 | true
20 |
21 |
22 | true
23 | Base
24 | true
25 |
26 |
27 | true
28 | Base
29 | true
30 |
31 |
32 | true
33 | Base
34 | true
35 |
36 |
37 | true
38 | Base
39 | true
40 |
41 |
42 | true
43 | Base
44 | true
45 |
46 |
47 | true
48 | Base
49 | true
50 |
51 |
52 | true
53 | Cfg_1
54 | true
55 | true
56 |
57 |
58 | true
59 | Base
60 | true
61 |
62 |
63 | .\$(Platform)\$(Config)
64 | .\$(Platform)\$(Config)
65 | false
66 | false
67 | false
68 | false
69 | false
70 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
71 | MiniWebServer
72 |
73 |
74 | DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;IndyIPServer;IndySystem;tethering;DzHTMLText_FMX;fmxFireDAC;FireDAC;bindcompfmx;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;fmx;FireDACIBDriver;xmlrtl;soapmidas;rtl;DbxClientDriver;CustomIPTransport;dbexpress;IndyCore;bindcomp;dsnap;FireDACCommon;IndyIPClient;RESTBackendComponents;soapserver;dbxcds;bindengine;CloudService;dsnapxml;dbrtl;IndyProtocols;FireDACCommonDriver;inet;$(DCC_UsePackage)
75 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
76 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
77 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
78 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
79 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
80 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png
81 | $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
82 | $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
83 | $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
84 | $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
85 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
86 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
87 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
88 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
89 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
90 | android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar
91 |
92 |
93 | DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;IndyIPServer;IndySystem;tethering;DzHTMLText_FMX;fmxFireDAC;FireDAC;bindcompfmx;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;fmx;FireDACIBDriver;xmlrtl;soapmidas;rtl;DbxClientDriver;CustomIPTransport;dbexpress;IndyCore;bindcomp;dsnap;FireDACCommon;IndyIPClient;RESTBackendComponents;soapserver;dbxcds;bindengine;CloudService;dsnapxml;dbrtl;IndyProtocols;FireDACCommonDriver;inet;$(DCC_UsePackage)
94 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
95 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
96 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
97 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
98 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
99 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png
100 | $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
101 | $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
102 | $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
103 | $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
104 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
105 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
106 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
107 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
108 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
109 | android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar
110 |
111 |
112 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers
113 | iPhoneAndiPad
114 | true
115 | Debug
116 | $(MSBuildProjectName)
117 |
118 |
119 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers
120 | iPhoneAndiPad
121 | true
122 |
123 |
124 | DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;IcsVclD104Run;vclFireDAC;IndySystem;IconFontsImageListFMX;bindcompvclsmp;tethering;svnui;bindcompvclwinx;dsnapcon;FireDACADSDriver;DzHTMLText_FMX;FireDACMSAccDriver;fmxFireDAC;IcsFmxD104Run;vclimg;TeeDB;FireDAC;PngComponentsD;vcltouch;IconFontsImageList;Jcl;vcldb;bindcompfmx;svn;FireDACSqliteDriver;FireDACPgDriver;inetdb;ChromeTabs_R;VirtualTreesDR;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;fmx;FireDACIBDriver;fmxdae;xmlrtl;soapmidas;vcledge;fmxobj;vclwinx;Tee;rtl;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;SynEditDR;bindcomp;appanalytics;dsnap;SVGIconImageListFMX;FireDACCommon;IndyIPClient;bindcompvcl;RESTBackendComponents;SVGIconImageList;TeeUI;VCLRESTComponents;soapserver;dbxcds;VclSmp;FMXPAN100;adortl;JclDeveloperTools;JclVcl;vclie;IcsCommonD104Run;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;IndyProtocols;inetdbxpress;SVGIconPackage;FireDACCommonODBC;FireDACCommonDriver;JclContainers;inet;fmxase;$(DCC_UsePackage)
125 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
126 | Debug
127 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
128 | 1033
129 | true
130 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
131 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
132 |
133 |
134 | DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;IcsVclD104Run;vclFireDAC;IndySystem;bindcompvclsmp;tethering;bindcompvclwinx;dsnapcon;FireDACADSDriver;DzHTMLText_FMX;FireDACMSAccDriver;fmxFireDAC;IcsFmxD104Run;vclimg;TeeDB;FireDAC;PngComponentsD;vcltouch;vcldb;bindcompfmx;FireDACSqliteDriver;FireDACPgDriver;inetdb;ChromeTabs_R;VirtualTreesDR;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;fmx;FireDACIBDriver;fmxdae;xmlrtl;soapmidas;vcledge;fmxobj;vclwinx;Tee;rtl;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;SynEditDR;bindcomp;appanalytics;dsnap;SVGIconImageListFMX;FireDACCommon;IndyIPClient;bindcompvcl;RESTBackendComponents;SVGIconImageList;TeeUI;VCLRESTComponents;soapserver;dbxcds;VclSmp;FMXPAN100;adortl;vclie;IcsCommonD104Run;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;IndyProtocols;inetdbxpress;SVGIconPackage;FireDACCommonODBC;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage)
135 | true
136 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
137 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
138 |
139 |
140 | DEBUG;$(DCC_Define)
141 | true
142 | false
143 | true
144 | true
145 | true
146 |
147 |
148 | false
149 |
150 |
151 | false
152 | RELEASE;$(DCC_Define)
153 | 0
154 | 0
155 |
156 |
157 |
158 | MainSource
159 |
160 |
161 |
162 |
163 | Cfg_2
164 | Base
165 |
166 |
167 | Base
168 |
169 |
170 | Cfg_1
171 | Base
172 |
173 |
174 |
175 | Delphi.Personality.12
176 | Application
177 |
178 |
179 |
180 | MiniWebServer.dpr
181 |
182 |
183 |
184 |
185 |
186 | true
187 |
188 |
189 |
190 |
191 | true
192 |
193 |
194 |
195 |
196 | true
197 |
198 |
199 |
200 |
201 |
202 | MiniWebServer.exe
203 | true
204 |
205 |
206 |
207 |
208 | 1
209 |
210 |
211 | Contents\MacOS
212 | 1
213 |
214 |
215 | 0
216 |
217 |
218 |
219 |
220 | classes
221 | 64
222 |
223 |
224 | classes
225 | 64
226 |
227 |
228 |
229 |
230 | classes
231 | 1
232 |
233 |
234 | classes
235 | 1
236 |
237 |
238 |
239 |
240 | res\xml
241 | 1
242 |
243 |
244 | res\xml
245 | 1
246 |
247 |
248 |
249 |
250 | library\lib\armeabi-v7a
251 | 1
252 |
253 |
254 |
255 |
256 | library\lib\armeabi
257 | 1
258 |
259 |
260 | library\lib\armeabi
261 | 1
262 |
263 |
264 |
265 |
266 | library\lib\armeabi-v7a
267 | 1
268 |
269 |
270 |
271 |
272 | library\lib\mips
273 | 1
274 |
275 |
276 | library\lib\mips
277 | 1
278 |
279 |
280 |
281 |
282 | library\lib\armeabi-v7a
283 | 1
284 |
285 |
286 | library\lib\arm64-v8a
287 | 1
288 |
289 |
290 |
291 |
292 | library\lib\armeabi-v7a
293 | 1
294 |
295 |
296 |
297 |
298 | res\drawable
299 | 1
300 |
301 |
302 | res\drawable
303 | 1
304 |
305 |
306 |
307 |
308 | res\values
309 | 1
310 |
311 |
312 | res\values
313 | 1
314 |
315 |
316 |
317 |
318 | res\values-v21
319 | 1
320 |
321 |
322 | res\values-v21
323 | 1
324 |
325 |
326 |
327 |
328 | res\values
329 | 1
330 |
331 |
332 | res\values
333 | 1
334 |
335 |
336 |
337 |
338 | res\drawable
339 | 1
340 |
341 |
342 | res\drawable
343 | 1
344 |
345 |
346 |
347 |
348 | res\drawable-xxhdpi
349 | 1
350 |
351 |
352 | res\drawable-xxhdpi
353 | 1
354 |
355 |
356 |
357 |
358 | res\drawable-xxxhdpi
359 | 1
360 |
361 |
362 | res\drawable-xxxhdpi
363 | 1
364 |
365 |
366 |
367 |
368 | res\drawable-ldpi
369 | 1
370 |
371 |
372 | res\drawable-ldpi
373 | 1
374 |
375 |
376 |
377 |
378 | res\drawable-mdpi
379 | 1
380 |
381 |
382 | res\drawable-mdpi
383 | 1
384 |
385 |
386 |
387 |
388 | res\drawable-hdpi
389 | 1
390 |
391 |
392 | res\drawable-hdpi
393 | 1
394 |
395 |
396 |
397 |
398 | res\drawable-xhdpi
399 | 1
400 |
401 |
402 | res\drawable-xhdpi
403 | 1
404 |
405 |
406 |
407 |
408 | res\drawable-mdpi
409 | 1
410 |
411 |
412 | res\drawable-mdpi
413 | 1
414 |
415 |
416 |
417 |
418 | res\drawable-hdpi
419 | 1
420 |
421 |
422 | res\drawable-hdpi
423 | 1
424 |
425 |
426 |
427 |
428 | res\drawable-xhdpi
429 | 1
430 |
431 |
432 | res\drawable-xhdpi
433 | 1
434 |
435 |
436 |
437 |
438 | res\drawable-xxhdpi
439 | 1
440 |
441 |
442 | res\drawable-xxhdpi
443 | 1
444 |
445 |
446 |
447 |
448 | res\drawable-xxxhdpi
449 | 1
450 |
451 |
452 | res\drawable-xxxhdpi
453 | 1
454 |
455 |
456 |
457 |
458 | res\drawable-small
459 | 1
460 |
461 |
462 | res\drawable-small
463 | 1
464 |
465 |
466 |
467 |
468 | res\drawable-normal
469 | 1
470 |
471 |
472 | res\drawable-normal
473 | 1
474 |
475 |
476 |
477 |
478 | res\drawable-large
479 | 1
480 |
481 |
482 | res\drawable-large
483 | 1
484 |
485 |
486 |
487 |
488 | res\drawable-xlarge
489 | 1
490 |
491 |
492 | res\drawable-xlarge
493 | 1
494 |
495 |
496 |
497 |
498 | res\values
499 | 1
500 |
501 |
502 | res\values
503 | 1
504 |
505 |
506 |
507 |
508 | 1
509 |
510 |
511 | Contents\MacOS
512 | 1
513 |
514 |
515 | 0
516 |
517 |
518 |
519 |
520 | Contents\MacOS
521 | 1
522 | .framework
523 |
524 |
525 | Contents\MacOS
526 | 1
527 | .framework
528 |
529 |
530 | 0
531 |
532 |
533 |
534 |
535 | 1
536 | .dylib
537 |
538 |
539 | 1
540 | .dylib
541 |
542 |
543 | 1
544 | .dylib
545 |
546 |
547 | Contents\MacOS
548 | 1
549 | .dylib
550 |
551 |
552 | Contents\MacOS
553 | 1
554 | .dylib
555 |
556 |
557 | 0
558 | .dll;.bpl
559 |
560 |
561 |
562 |
563 | 1
564 | .dylib
565 |
566 |
567 | 1
568 | .dylib
569 |
570 |
571 | 1
572 | .dylib
573 |
574 |
575 | Contents\MacOS
576 | 1
577 | .dylib
578 |
579 |
580 | Contents\MacOS
581 | 1
582 | .dylib
583 |
584 |
585 | 0
586 | .bpl
587 |
588 |
589 |
590 |
591 | 0
592 |
593 |
594 | 0
595 |
596 |
597 | 0
598 |
599 |
600 | 0
601 |
602 |
603 | 0
604 |
605 |
606 | Contents\Resources\StartUp\
607 | 0
608 |
609 |
610 | Contents\Resources\StartUp\
611 | 0
612 |
613 |
614 | 0
615 |
616 |
617 |
618 |
619 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
620 | 1
621 |
622 |
623 |
624 |
625 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
626 | 1
627 |
628 |
629 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
630 | 1
631 |
632 |
633 |
634 |
635 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
636 | 1
637 |
638 |
639 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
640 | 1
641 |
642 |
643 |
644 |
645 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
646 | 1
647 |
648 |
649 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
650 | 1
651 |
652 |
653 |
654 |
655 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
656 | 1
657 |
658 |
659 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
660 | 1
661 |
662 |
663 |
664 |
665 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
666 | 1
667 |
668 |
669 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
670 | 1
671 |
672 |
673 |
674 |
675 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
676 | 1
677 |
678 |
679 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
680 | 1
681 |
682 |
683 |
684 |
685 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
686 | 1
687 |
688 |
689 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
690 | 1
691 |
692 |
693 |
694 |
695 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
696 | 1
697 |
698 |
699 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
700 | 1
701 |
702 |
703 |
704 |
705 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
706 | 1
707 |
708 |
709 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
710 | 1
711 |
712 |
713 |
714 |
715 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
716 | 1
717 |
718 |
719 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
720 | 1
721 |
722 |
723 |
724 |
725 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
726 | 1
727 |
728 |
729 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
730 | 1
731 |
732 |
733 |
734 |
735 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
736 | 1
737 |
738 |
739 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
740 | 1
741 |
742 |
743 |
744 |
745 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
746 | 1
747 |
748 |
749 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
750 | 1
751 |
752 |
753 |
754 |
755 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
756 | 1
757 |
758 |
759 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
760 | 1
761 |
762 |
763 |
764 |
765 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
766 | 1
767 |
768 |
769 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
770 | 1
771 |
772 |
773 |
774 |
775 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
776 | 1
777 |
778 |
779 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
780 | 1
781 |
782 |
783 |
784 |
785 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
786 | 1
787 |
788 |
789 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
790 | 1
791 |
792 |
793 |
794 |
795 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
796 | 1
797 |
798 |
799 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
800 | 1
801 |
802 |
803 |
804 |
805 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
806 | 1
807 |
808 |
809 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
810 | 1
811 |
812 |
813 |
814 |
815 | 1
816 |
817 |
818 | 1
819 |
820 |
821 |
822 |
823 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
824 | 1
825 |
826 |
827 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
828 | 1
829 |
830 |
831 |
832 |
833 | ..\
834 | 1
835 |
836 |
837 | ..\
838 | 1
839 |
840 |
841 |
842 |
843 | 1
844 |
845 |
846 | 1
847 |
848 |
849 | 1
850 |
851 |
852 |
853 |
854 | ..\$(PROJECTNAME).launchscreen
855 | 64
856 |
857 |
858 | ..\$(PROJECTNAME).launchscreen
859 | 64
860 |
861 |
862 |
863 |
864 | 1
865 |
866 |
867 | 1
868 |
869 |
870 | 1
871 |
872 |
873 |
874 |
875 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
876 | 1
877 |
878 |
879 |
880 |
881 | ..\
882 | 1
883 |
884 |
885 | ..\
886 | 1
887 |
888 |
889 |
890 |
891 | Contents
892 | 1
893 |
894 |
895 | Contents
896 | 1
897 |
898 |
899 |
900 |
901 | Contents\Resources
902 | 1
903 |
904 |
905 | Contents\Resources
906 | 1
907 |
908 |
909 |
910 |
911 | library\lib\armeabi-v7a
912 | 1
913 |
914 |
915 | library\lib\arm64-v8a
916 | 1
917 |
918 |
919 | 1
920 |
921 |
922 | 1
923 |
924 |
925 | 1
926 |
927 |
928 | 1
929 |
930 |
931 | Contents\MacOS
932 | 1
933 |
934 |
935 | Contents\MacOS
936 | 1
937 |
938 |
939 | 0
940 |
941 |
942 |
943 |
944 | library\lib\armeabi-v7a
945 | 1
946 |
947 |
948 |
949 |
950 | 1
951 |
952 |
953 | 1
954 |
955 |
956 |
957 |
958 | Assets
959 | 1
960 |
961 |
962 | Assets
963 | 1
964 |
965 |
966 |
967 |
968 | Assets
969 | 1
970 |
971 |
972 | Assets
973 | 1
974 |
975 |
976 |
977 |
978 |
979 |
980 |
981 |
982 |
983 |
984 |
985 |
986 |
987 |
988 |
989 |
990 | False
991 | False
992 | False
993 | False
994 | True
995 | False
996 |
997 |
998 | 12
999 |
1000 |
1001 |
1002 |
1003 |
1004 |
--------------------------------------------------------------------------------
/MiniWebServer.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HemulGM/MiniWebServer/37769fea8d1e6527773d4279351e2a02ae69111f/MiniWebServer.res
--------------------------------------------------------------------------------
/MiniWebServerGroup.groupproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {D76B0ABE-CC8E-4FFE-995D-DB1F59FF7E31}
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | Default.Personality.12
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/MiniWebServer_Attrib.dpr:
--------------------------------------------------------------------------------
1 | program MiniWebServer_Attrib;
2 |
3 | uses
4 | System.SysUtils,
5 | System.Json,
6 | HTTP.Server in 'HTTP.Server.pas',
7 | WMS.OWM in 'Sample\WMS.OWM.pas';
8 |
9 | type
10 | TServer = class(THTTPServer)
11 | procedure Test(Request: TRequest; Response: TResponse);
12 | procedure Check(Request: TRequest; Response: TResponse);
13 | end;
14 |
15 | { TServer }
16 |
17 | [RouteMethod('/check', [GET])]
18 | procedure TServer.Check;
19 | begin
20 | //send json
21 | Response.Json('{ "value": "test_text" }', 401);
22 | //send file
23 | Response.AsFile('C:\file.ext');
24 | end;
25 |
26 | [RouteMethod('/test', [GET, HEAD])]
27 | procedure TServer.Test;
28 | begin
29 | var Json := TJSONObject.Create;
30 |
31 | Json.AddPair('id', TJSONNumber.Create(Request.Params.Values['id'].ToInteger));
32 | Json.AddPair('text', 'Text');
33 | Json.AddPair('array', TJSONArray.Create('text1', 'text2'));
34 | Response.Json(Json);
35 | end;
36 |
37 | begin
38 | var Server := TServer.Create;
39 | try
40 | Server.AutoFileServer := True;
41 | Server.Route('/run',
42 | procedure(Request: TRequest; Response: TResponse)
43 | begin
44 | Response.Json('{ "text": "done" }', 200);
45 | end);
46 | Server.Route('/weather', GetWeather);
47 | Server.Run([777]);
48 | finally
49 | Server.Free;
50 | end;
51 | end.
52 |
53 |
--------------------------------------------------------------------------------
/MiniWebServer_Attrib.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HemulGM/MiniWebServer/37769fea8d1e6527773d4279351e2a02ae69111f/MiniWebServer_Attrib.res
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MiniWebServer
2 |
3 | ```pascal
4 | program MiniWebServer;
5 |
6 | uses
7 | HTTP.Server in 'HTTP.Server.pas',
8 | WMS.OWM in 'Sample\WMS.OWM.pas';
9 |
10 | begin
11 | var Server := THTTPServer.Create;
12 | try
13 | Server.Route('/weather', GetWeather);
14 | Server.Run([80, 8080, 9090]);
15 | finally
16 | Server.Free;
17 | end;
18 | end.
19 | ```
20 |
21 | ```pascal
22 | program MiniWebServer_Attrib;
23 |
24 | uses
25 | HTTP.Server in 'HTTP.Server.pas',
26 | WMS.OWM in 'Sample\WMS.OWM.pas';
27 |
28 | type
29 | TServer = class(THTTPServer)
30 | //auto class routes
31 | [RouteMethod('/test', [GET, HEAD])]
32 | procedure Test(Request: TRequest; Response: TResponse);
33 | [RouteMethod('/check', [GET])]
34 | procedure Check(Request: TRequest; Response: TResponse);
35 | end;
36 |
37 | { TServer }
38 |
39 | procedure TServer.Check;
40 | begin
41 | //send json text
42 | Response.Json('{ "value": "test_text" }', 401);
43 | //send file
44 | Response.AsFile('C:\file.ext');
45 | //send json object
46 | var JObject := TJsonObject.Create;
47 | Response.Json(JObject, 200); // auto clear
48 | end;
49 |
50 | procedure TServer.Test;
51 | begin
52 | //send object
53 | var Obj := TObject.Create;
54 | Response.Json(Obj);
55 | Obj.Free;
56 | end;
57 |
58 | begin
59 | var Server := TServer.Create;
60 | try
61 | //GET files
62 | Server.AutoFileServer := True;
63 | //inline route
64 | Server.Route('/run',
65 | procedure(Request: TRequest; Response: TResponse)
66 | begin
67 | Response.Json('{ "text": "done" }', 200);
68 | end);
69 | //add route
70 | Server.Route('/weather', GetWeather);
71 | Server.Run([80, 8080, 9090]);
72 | finally
73 | Server.Free;
74 | end;
75 | end.
76 | ```
77 |
--------------------------------------------------------------------------------
/Sample/StressTest/StressTest.dpr:
--------------------------------------------------------------------------------
1 | program StressTest;
2 |
3 | uses
4 | System.SysUtils,
5 | HTTP.Server in '..\..\HTTP.Server.pas';
6 |
7 | begin
8 | var Server := THTTPServer.Create;
9 | try
10 | Server.Route('/',
11 | procedure(var Response: string; var Code: Word)
12 | begin
13 | Response := 'Hello World Delphi!';
14 | end);
15 |
16 | Server.Route('/readfile',
17 | procedure(Request: TRequest; Response: TResponse)
18 | begin
19 | Response.AsFile('data.txt');
20 | end);
21 |
22 | Server.Route('/fibonacci',
23 | procedure(var Response: string; var Code: Word)
24 | begin
25 | Sleep(10000);
26 | var a, b, c: Cardinal;
27 | a := 0;
28 | b := 1;
29 | c := 0;
30 | for var i := 2 to 2000000 do
31 | begin
32 | c := a + b;
33 | a := b;
34 | b := c;
35 | end;
36 | Response := c.ToString;
37 | end);
38 | Server.Run([555]);
39 | finally
40 | Server.Free;
41 | end;
42 | end.
43 |
44 |
--------------------------------------------------------------------------------
/Sample/StressTest/StressTest.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {5261ED2C-5EAC-441F-8B9A-00DFEA026399}
4 | 19.2
5 | None
6 | True
7 | Release
8 | Win32
9 | 1
10 | Console
11 | StressTest.dpr
12 |
13 |
14 | true
15 |
16 |
17 | true
18 | Base
19 | true
20 |
21 |
22 | true
23 | Base
24 | true
25 |
26 |
27 | true
28 | Base
29 | true
30 |
31 |
32 | true
33 | Base
34 | true
35 |
36 |
37 | true
38 | Base
39 | true
40 |
41 |
42 | true
43 | Base
44 | true
45 |
46 |
47 | true
48 | Base
49 | true
50 |
51 |
52 | true
53 | Cfg_1
54 | true
55 | true
56 |
57 |
58 | true
59 | Base
60 | true
61 |
62 |
63 | .\$(Platform)\$(Config)
64 | .\$(Platform)\$(Config)
65 | false
66 | false
67 | false
68 | false
69 | false
70 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
71 | StressTest
72 |
73 |
74 | DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;tethering;DzHTMLText_FMX;bindcompfmx;FmxTeeUI;fmx;FireDACIBDriver;dbexpress;IndyCore;dsnap;FireDACCommon;RESTBackendComponents;soapserver;Skia.Package.FMX;FMXAudioHGM;bindengine;CloudService;FireDACCommonDriver;inet;IndyIPCommon;bindcompdbx;IndyIPServer;sgcWebSocketsD10_4;IndySystem;fmxFireDAC;FireDAC;VLCPlayer;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;Skia.Package.RTL;FrameStandPackage_10_4;dbxcds;dsnapxml;dbrtl;IndyProtocols;$(DCC_UsePackage)
75 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
76 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
77 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
78 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
79 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
80 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png
81 | $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
82 | $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
83 | $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
84 | $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
85 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
86 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
87 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
88 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
89 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
90 | android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar
91 |
92 |
93 | DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;tethering;DzHTMLText_FMX;bindcompfmx;FmxTeeUI;fmx;FireDACIBDriver;RadiantShapesFmx;dbexpress;IndyCore;dsnap;FireDACCommon;RESTBackendComponents;soapserver;Skia.Package.FMX;FMXAudioHGM;bindengine;CloudService;FireDACCommonDriver;inet;IndyIPCommon;bindcompdbx;CPortLibD2010;IndyIPServer;sgcWebSocketsD10_4;IndySystem;fmxFireDAC;FireDAC;VLCPlayer;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;Skia.Package.RTL;FrameStandPackage_10_4;dbxcds;RadiantShapesFmx_Design;dsnapxml;dbrtl;IndyProtocols;$(DCC_UsePackage)
94 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
95 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
96 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
97 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
98 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
99 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png
100 | $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
101 | $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
102 | $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
103 | $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
104 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
105 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
106 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
107 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
108 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
109 | android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar
110 |
111 |
112 | DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;tethering;DzHTMLText_FMX;bindcompfmx;FmxTeeUI;fmx;FireDACIBDriver;RadiantShapesFmx;dbexpress;IndyCore;dsnap;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;inet;IndyIPCommon;bindcompdbx;CPortLibD2010;IndyIPServer;sgcWebSocketsD10_4;IndySystem;fmxFireDAC;FireDAC;VLCPlayer;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;RadiantShapesFmx_Design;dsnapxml;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage)
113 |
114 |
115 | DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;tethering;DzHTMLText_FMX;bindcompfmx;FmxTeeUI;fmx;FireDACIBDriver;dbexpress;IndyCore;dsnap;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;inet;IndyIPCommon;bindcompdbx;IndyIPServer;sgcWebSocketsD10_4;IndySystem;fmxFireDAC;FireDAC;VLCPlayer;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;FrameStandPackage_10_4;dbxcds;dsnapxml;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage)
116 |
117 |
118 | DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;tethering;svnui;FireDACADSDriver;DzHTMLText_FMX;PngComponentsD;vcltouch;IconFontsImageList;vcldb;bindcompfmx;svn;inetdb;VirtualTreesDR;FmxTeeUI;fmx;FireDACIBDriver;fmxdae;RadiantShapesFmx;vcledge;VKComponents;dbexpress;IndyCore;vclx;dsnap;SVGIconImageListFMX;FireDACCommon;RESTBackendComponents;VCLRESTComponents;Skia.Package.VCL;soapserver;FMXPAN100;Skia.Package.FMX;JclDeveloperTools;FMXAudioHGM;vclie;IcsCommonD104Run;bindengine;DBXMySQLDriver;CloudService;SVGIconPackage;FireDACMySQLDriver;FireDACCommonODBC;FireDACCommonDriver;TMSWEBCorePkgLibDXE13;inet;IndyIPCommon;bindcompdbx;IcsVclD104Run;CPortLibD2010;vcl;IndyIPServer;sgcWebSocketsD10_4;IconFontsImageListFMX;IndySystem;bindcompvclwinx;dsnapcon;FireDACMSAccDriver;fmxFireDAC;IcsFmxD104Run;vclimg;TeeDB;FireDAC;Jcl;VLCPlayer;FireDACSqliteDriver;FireDACPgDriver;ChromeTabs_R;TMSWEBCorePkgDXE13;FMXTee;soaprtl;DbxCommonDriver;Tee;xmlrtl;soapmidas;fmxobj;vclwinx;rtl;DbxClientDriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;IndyIPClient;Skia.Package.RTL;bindcompvcl;SynEdit_R;FrameStandPackage_10_4;SVGIconImageList;TeeUI;dbxcds;VclSmp;adortl;RadiantShapesFmx_Design;JclVcl;dsnapxml;dbrtl;IndyProtocols;inetdbxpress;FMXAppWizard;HGMComponents;JclContainers;fmxase;$(DCC_UsePackage)
119 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
120 | Debug
121 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
122 | 1033
123 | true
124 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
125 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
126 |
127 |
128 | DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;tethering;FireDACADSDriver;DzHTMLText_FMX;PngComponentsD;vcltouch;vcldb;bindcompfmx;inetdb;VirtualTreesDR;FmxTeeUI;fmx;FireDACIBDriver;fmxdae;vcledge;dbexpress;IndyCore;vclx;dsnap;SVGIconImageListFMX;FireDACCommon;RESTBackendComponents;VCLRESTComponents;Skia.Package.VCL;soapserver;FMXPAN100;Skia.Package.FMX;FMXAudioHGM;vclie;IcsCommonD104Run;bindengine;DBXMySQLDriver;CloudService;SVGIconPackage;FireDACMySQLDriver;FireDACCommonODBC;FireDACCommonDriver;inet;IndyIPCommon;bindcompdbx;IcsVclD104Run;vcl;IndyIPServer;sgcWebSocketsD10_4;IndySystem;bindcompvclwinx;dsnapcon;FireDACMSAccDriver;fmxFireDAC;IcsFmxD104Run;vclimg;TeeDB;FireDAC;VLCPlayer;FireDACSqliteDriver;FireDACPgDriver;ChromeTabs_R;FMXTee;soaprtl;DbxCommonDriver;Tee;xmlrtl;soapmidas;fmxobj;vclwinx;rtl;DbxClientDriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;IndyIPClient;Skia.Package.RTL;bindcompvcl;SynEdit_R;FrameStandPackage_10_4;SVGIconImageList;TeeUI;dbxcds;VclSmp;adortl;dsnapxml;dbrtl;IndyProtocols;inetdbxpress;fmxase;$(DCC_UsePackage)
129 | true
130 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
131 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
132 |
133 |
134 | DEBUG;$(DCC_Define)
135 | true
136 | false
137 | true
138 | true
139 | true
140 |
141 |
142 | false
143 |
144 |
145 | false
146 | RELEASE;$(DCC_Define)
147 | 0
148 | 0
149 |
150 |
151 |
152 | MainSource
153 |
154 |
155 |
156 | Cfg_2
157 | Base
158 |
159 |
160 | Base
161 |
162 |
163 | Cfg_1
164 | Base
165 |
166 |
167 |
168 | Delphi.Personality.12
169 | Application
170 |
171 |
172 |
173 | StressTest.dpr
174 |
175 |
176 |
177 |
178 |
179 | true
180 |
181 |
182 |
183 |
184 | true
185 |
186 |
187 |
188 |
189 | true
190 |
191 |
192 |
193 |
194 | StressTest.exe
195 | true
196 |
197 |
198 |
199 |
200 | 1
201 |
202 |
203 | Contents\MacOS
204 | 1
205 |
206 |
207 | 0
208 |
209 |
210 |
211 |
212 | classes
213 | 1
214 |
215 |
216 | classes
217 | 1
218 |
219 |
220 |
221 |
222 | res\xml
223 | 1
224 |
225 |
226 | res\xml
227 | 1
228 |
229 |
230 |
231 |
232 | library\lib\armeabi-v7a
233 | 1
234 |
235 |
236 |
237 |
238 | library\lib\armeabi
239 | 1
240 |
241 |
242 | library\lib\armeabi
243 | 1
244 |
245 |
246 |
247 |
248 | library\lib\armeabi-v7a
249 | 1
250 |
251 |
252 |
253 |
254 | library\lib\mips
255 | 1
256 |
257 |
258 | library\lib\mips
259 | 1
260 |
261 |
262 |
263 |
264 | library\lib\armeabi-v7a
265 | 1
266 |
267 |
268 | library\lib\arm64-v8a
269 | 1
270 |
271 |
272 |
273 |
274 | library\lib\armeabi-v7a
275 | 1
276 |
277 |
278 |
279 |
280 | res\drawable
281 | 1
282 |
283 |
284 | res\drawable
285 | 1
286 |
287 |
288 |
289 |
290 | res\values
291 | 1
292 |
293 |
294 | res\values
295 | 1
296 |
297 |
298 |
299 |
300 | res\values-v21
301 | 1
302 |
303 |
304 | res\values-v21
305 | 1
306 |
307 |
308 |
309 |
310 | res\values
311 | 1
312 |
313 |
314 | res\values
315 | 1
316 |
317 |
318 |
319 |
320 | res\drawable
321 | 1
322 |
323 |
324 | res\drawable
325 | 1
326 |
327 |
328 |
329 |
330 | res\drawable-xxhdpi
331 | 1
332 |
333 |
334 | res\drawable-xxhdpi
335 | 1
336 |
337 |
338 |
339 |
340 | res\drawable-xxxhdpi
341 | 1
342 |
343 |
344 | res\drawable-xxxhdpi
345 | 1
346 |
347 |
348 |
349 |
350 | res\drawable-ldpi
351 | 1
352 |
353 |
354 | res\drawable-ldpi
355 | 1
356 |
357 |
358 |
359 |
360 | res\drawable-mdpi
361 | 1
362 |
363 |
364 | res\drawable-mdpi
365 | 1
366 |
367 |
368 |
369 |
370 | res\drawable-hdpi
371 | 1
372 |
373 |
374 | res\drawable-hdpi
375 | 1
376 |
377 |
378 |
379 |
380 | res\drawable-xhdpi
381 | 1
382 |
383 |
384 | res\drawable-xhdpi
385 | 1
386 |
387 |
388 |
389 |
390 | res\drawable-mdpi
391 | 1
392 |
393 |
394 | res\drawable-mdpi
395 | 1
396 |
397 |
398 |
399 |
400 | res\drawable-hdpi
401 | 1
402 |
403 |
404 | res\drawable-hdpi
405 | 1
406 |
407 |
408 |
409 |
410 | res\drawable-xhdpi
411 | 1
412 |
413 |
414 | res\drawable-xhdpi
415 | 1
416 |
417 |
418 |
419 |
420 | res\drawable-xxhdpi
421 | 1
422 |
423 |
424 | res\drawable-xxhdpi
425 | 1
426 |
427 |
428 |
429 |
430 | res\drawable-xxxhdpi
431 | 1
432 |
433 |
434 | res\drawable-xxxhdpi
435 | 1
436 |
437 |
438 |
439 |
440 | res\drawable-small
441 | 1
442 |
443 |
444 | res\drawable-small
445 | 1
446 |
447 |
448 |
449 |
450 | res\drawable-normal
451 | 1
452 |
453 |
454 | res\drawable-normal
455 | 1
456 |
457 |
458 |
459 |
460 | res\drawable-large
461 | 1
462 |
463 |
464 | res\drawable-large
465 | 1
466 |
467 |
468 |
469 |
470 | res\drawable-xlarge
471 | 1
472 |
473 |
474 | res\drawable-xlarge
475 | 1
476 |
477 |
478 |
479 |
480 | res\values
481 | 1
482 |
483 |
484 | res\values
485 | 1
486 |
487 |
488 |
489 |
490 | 1
491 |
492 |
493 | Contents\MacOS
494 | 1
495 |
496 |
497 | 0
498 |
499 |
500 |
501 |
502 | Contents\MacOS
503 | 1
504 | .framework
505 |
506 |
507 | Contents\MacOS
508 | 1
509 | .framework
510 |
511 |
512 | 0
513 |
514 |
515 |
516 |
517 | 1
518 | .dylib
519 |
520 |
521 | 1
522 | .dylib
523 |
524 |
525 | 1
526 | .dylib
527 |
528 |
529 | Contents\MacOS
530 | 1
531 | .dylib
532 |
533 |
534 | Contents\MacOS
535 | 1
536 | .dylib
537 |
538 |
539 | 0
540 | .dll;.bpl
541 |
542 |
543 |
544 |
545 | 1
546 | .dylib
547 |
548 |
549 | 1
550 | .dylib
551 |
552 |
553 | 1
554 | .dylib
555 |
556 |
557 | Contents\MacOS
558 | 1
559 | .dylib
560 |
561 |
562 | Contents\MacOS
563 | 1
564 | .dylib
565 |
566 |
567 | 0
568 | .bpl
569 |
570 |
571 |
572 |
573 | 0
574 |
575 |
576 | 0
577 |
578 |
579 | 0
580 |
581 |
582 | 0
583 |
584 |
585 | 0
586 |
587 |
588 | Contents\Resources\StartUp\
589 | 0
590 |
591 |
592 | Contents\Resources\StartUp\
593 | 0
594 |
595 |
596 | 0
597 |
598 |
599 |
600 |
601 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
602 | 1
603 |
604 |
605 |
606 |
607 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
608 | 1
609 |
610 |
611 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
612 | 1
613 |
614 |
615 |
616 |
617 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
618 | 1
619 |
620 |
621 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
622 | 1
623 |
624 |
625 |
626 |
627 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
628 | 1
629 |
630 |
631 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
632 | 1
633 |
634 |
635 |
636 |
637 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
638 | 1
639 |
640 |
641 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
642 | 1
643 |
644 |
645 |
646 |
647 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
648 | 1
649 |
650 |
651 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
652 | 1
653 |
654 |
655 |
656 |
657 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
658 | 1
659 |
660 |
661 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
662 | 1
663 |
664 |
665 |
666 |
667 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
668 | 1
669 |
670 |
671 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
672 | 1
673 |
674 |
675 |
676 |
677 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
678 | 1
679 |
680 |
681 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
682 | 1
683 |
684 |
685 |
686 |
687 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
688 | 1
689 |
690 |
691 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
692 | 1
693 |
694 |
695 |
696 |
697 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
698 | 1
699 |
700 |
701 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
702 | 1
703 |
704 |
705 |
706 |
707 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
708 | 1
709 |
710 |
711 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
712 | 1
713 |
714 |
715 |
716 |
717 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
718 | 1
719 |
720 |
721 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
722 | 1
723 |
724 |
725 |
726 |
727 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
728 | 1
729 |
730 |
731 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
732 | 1
733 |
734 |
735 |
736 |
737 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
738 | 1
739 |
740 |
741 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
742 | 1
743 |
744 |
745 |
746 |
747 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
748 | 1
749 |
750 |
751 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
752 | 1
753 |
754 |
755 |
756 |
757 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
758 | 1
759 |
760 |
761 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
762 | 1
763 |
764 |
765 |
766 |
767 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
768 | 1
769 |
770 |
771 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
772 | 1
773 |
774 |
775 |
776 |
777 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
778 | 1
779 |
780 |
781 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
782 | 1
783 |
784 |
785 |
786 |
787 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
788 | 1
789 |
790 |
791 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
792 | 1
793 |
794 |
795 |
796 |
797 | 1
798 |
799 |
800 | 1
801 |
802 |
803 |
804 |
805 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
806 | 1
807 |
808 |
809 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
810 | 1
811 |
812 |
813 |
814 |
815 | ..\
816 | 1
817 |
818 |
819 | ..\
820 | 1
821 |
822 |
823 |
824 |
825 | 1
826 |
827 |
828 | 1
829 |
830 |
831 | 1
832 |
833 |
834 |
835 |
836 | ..\$(PROJECTNAME).launchscreen
837 | 64
838 |
839 |
840 | ..\$(PROJECTNAME).launchscreen
841 | 64
842 |
843 |
844 |
845 |
846 | 1
847 |
848 |
849 | 1
850 |
851 |
852 | 1
853 |
854 |
855 |
856 |
857 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
858 | 1
859 |
860 |
861 |
862 |
863 | ..\
864 | 1
865 |
866 |
867 | ..\
868 | 1
869 |
870 |
871 |
872 |
873 | Contents
874 | 1
875 |
876 |
877 | Contents
878 | 1
879 |
880 |
881 |
882 |
883 | Contents\Resources
884 | 1
885 |
886 |
887 | Contents\Resources
888 | 1
889 |
890 |
891 |
892 |
893 | library\lib\armeabi-v7a
894 | 1
895 |
896 |
897 | library\lib\arm64-v8a
898 | 1
899 |
900 |
901 | 1
902 |
903 |
904 | 1
905 |
906 |
907 | 1
908 |
909 |
910 | 1
911 |
912 |
913 | Contents\MacOS
914 | 1
915 |
916 |
917 | Contents\MacOS
918 | 1
919 |
920 |
921 | 0
922 |
923 |
924 |
925 |
926 | library\lib\armeabi-v7a
927 | 1
928 |
929 |
930 |
931 |
932 | 1
933 |
934 |
935 | 1
936 |
937 |
938 |
939 |
940 | Assets
941 | 1
942 |
943 |
944 | Assets
945 | 1
946 |
947 |
948 |
949 |
950 | Assets
951 | 1
952 |
953 |
954 | Assets
955 | 1
956 |
957 |
958 |
959 |
960 |
961 |
962 |
963 |
964 |
965 |
966 |
967 |
968 |
969 |
970 | False
971 | False
972 | False
973 | False
974 | True
975 | False
976 |
977 |
978 | 12
979 |
980 |
981 |
982 |
983 |
984 |
--------------------------------------------------------------------------------
/Sample/StressTest/StressTest.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HemulGM/MiniWebServer/37769fea8d1e6527773d4279351e2a02ae69111f/Sample/StressTest/StressTest.res
--------------------------------------------------------------------------------
/Sample/WMS.OWM.pas:
--------------------------------------------------------------------------------
1 | unit WMS.OWM;
2 |
3 | interface
4 |
5 | uses
6 | HTTP.Server;
7 |
8 | procedure GetWeather(Request: TRequest; Response: TResponse);
9 |
10 | implementation
11 |
12 | procedure GetWeather(Request: TRequest; Response: TResponse);
13 | begin
14 | Response.Json('{ "value": "+22" }');
15 | end;
16 |
17 | end.
18 |
19 |
--------------------------------------------------------------------------------
/Tester/GetTester.dpr:
--------------------------------------------------------------------------------
1 | program GetTester;
2 |
3 | {$APPTYPE CONSOLE}
4 |
5 | {$R *.res}
6 |
7 | uses
8 | System.SysUtils,
9 | System.Classes,
10 | System.Threading,
11 | System.Net.HttpClient;
12 |
13 | var i: integer;
14 |
15 | begin
16 | try
17 | i := 0;
18 | var Count := 0;
19 | var CountMax := 100000;
20 | var Tasks: TArray;
21 | SetLength(Tasks, CountMax);
22 | repeat
23 | Tasks[Count] := TTask.Run(
24 | procedure
25 | begin
26 | try
27 |
28 | Inc(i);
29 | with THTTPClient.Create do
30 | try
31 | Writeln(i, ' ', Get('http://root.hemulgm.ru').StatusCode);
32 | finally
33 | Free;
34 | end;
35 | except
36 | on E: Exception do
37 | Writeln(E.ClassName, ': ', E.Message);
38 | end;
39 | end);
40 | Inc(Count);
41 | until Count > CountMax;
42 | TTask.WaitForAll(Tasks);
43 | except
44 | on E: Exception do
45 | Writeln(E.ClassName, ': ', E.Message);
46 | end;
47 | Writeln('done');
48 | Readln;
49 | end.
50 |
51 |
--------------------------------------------------------------------------------
/Tester/GetTester.dproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | {86F5C31E-AF84-446C-B609-C7EBA86A9189}
4 | 19.2
5 | None
6 | True
7 | Debug
8 | Win32
9 | 1
10 | Console
11 | GetTester.dpr
12 |
13 |
14 | true
15 |
16 |
17 | true
18 | Base
19 | true
20 |
21 |
22 | true
23 | Base
24 | true
25 |
26 |
27 | true
28 | Base
29 | true
30 |
31 |
32 | true
33 | Base
34 | true
35 |
36 |
37 | true
38 | Base
39 | true
40 |
41 |
42 | true
43 | Base
44 | true
45 |
46 |
47 | true
48 | Base
49 | true
50 |
51 |
52 | true
53 | Cfg_1
54 | true
55 | true
56 |
57 |
58 | true
59 | Base
60 | true
61 |
62 |
63 | .\$(Platform)\$(Config)
64 | .\$(Platform)\$(Config)
65 | false
66 | false
67 | false
68 | false
69 | false
70 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
71 | GetTester
72 |
73 |
74 | DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;IndyIPServer;IndySystem;tethering;DzHTMLText_FMX;fmxFireDAC;FireDAC;bindcompfmx;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;fmx;FireDACIBDriver;xmlrtl;soapmidas;rtl;DbxClientDriver;CustomIPTransport;dbexpress;IndyCore;bindcomp;dsnap;FireDACCommon;IndyIPClient;RESTBackendComponents;soapserver;dbxcds;bindengine;CloudService;dsnapxml;dbrtl;IndyProtocols;FireDACCommonDriver;inet;$(DCC_UsePackage)
75 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
76 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
77 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
78 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
79 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
80 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png
81 | $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
82 | $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
83 | $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
84 | $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
85 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
86 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
87 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
88 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
89 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
90 | android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar
91 |
92 |
93 | DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;IndyIPServer;IndySystem;tethering;DzHTMLText_FMX;fmxFireDAC;FireDAC;bindcompfmx;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;fmx;FireDACIBDriver;xmlrtl;soapmidas;rtl;DbxClientDriver;CustomIPTransport;dbexpress;IndyCore;bindcomp;dsnap;FireDACCommon;IndyIPClient;RESTBackendComponents;soapserver;dbxcds;bindengine;CloudService;dsnapxml;dbrtl;IndyProtocols;FireDACCommonDriver;inet;$(DCC_UsePackage)
94 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
95 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
96 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
97 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
98 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
99 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png
100 | $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
101 | $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
102 | $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
103 | $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
104 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
105 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
106 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
107 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
108 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
109 | android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar
110 |
111 |
112 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers
113 | iPhoneAndiPad
114 | true
115 | Debug
116 | $(MSBuildProjectName)
117 |
118 |
119 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers
120 | iPhoneAndiPad
121 | true
122 |
123 |
124 | DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;IcsVclD104Run;vclFireDAC;IndySystem;IconFontsImageListFMX;bindcompvclsmp;tethering;svnui;bindcompvclwinx;dsnapcon;FireDACADSDriver;DzHTMLText_FMX;FireDACMSAccDriver;fmxFireDAC;IcsFmxD104Run;vclimg;TeeDB;FireDAC;PngComponentsD;vcltouch;IconFontsImageList;Jcl;vcldb;bindcompfmx;svn;FireDACSqliteDriver;FireDACPgDriver;inetdb;ChromeTabs_R;VirtualTreesDR;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;fmx;FireDACIBDriver;fmxdae;xmlrtl;soapmidas;vcledge;fmxobj;vclwinx;Tee;rtl;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;SynEditDR;bindcomp;appanalytics;dsnap;SVGIconImageListFMX;FireDACCommon;IndyIPClient;bindcompvcl;RESTBackendComponents;SVGIconImageList;TeeUI;VCLRESTComponents;soapserver;dbxcds;VclSmp;FMXPAN100;adortl;JclDeveloperTools;JclVcl;vclie;IcsCommonD104Run;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;IndyProtocols;inetdbxpress;SVGIconPackage;FireDACCommonODBC;FireDACCommonDriver;JclContainers;inet;fmxase;$(DCC_UsePackage)
125 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
126 | Debug
127 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
128 | 1033
129 | true
130 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
131 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
132 |
133 |
134 | DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;IcsVclD104Run;vclFireDAC;IndySystem;bindcompvclsmp;tethering;bindcompvclwinx;dsnapcon;FireDACADSDriver;DzHTMLText_FMX;FireDACMSAccDriver;fmxFireDAC;IcsFmxD104Run;vclimg;TeeDB;FireDAC;PngComponentsD;vcltouch;vcldb;bindcompfmx;FireDACSqliteDriver;FireDACPgDriver;inetdb;ChromeTabs_R;VirtualTreesDR;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;fmx;FireDACIBDriver;fmxdae;xmlrtl;soapmidas;vcledge;fmxobj;vclwinx;Tee;rtl;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;SynEditDR;bindcomp;appanalytics;dsnap;SVGIconImageListFMX;FireDACCommon;IndyIPClient;bindcompvcl;RESTBackendComponents;SVGIconImageList;TeeUI;VCLRESTComponents;soapserver;dbxcds;VclSmp;FMXPAN100;adortl;vclie;IcsCommonD104Run;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;IndyProtocols;inetdbxpress;SVGIconPackage;FireDACCommonODBC;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage)
135 | true
136 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
137 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
138 |
139 |
140 | DEBUG;$(DCC_Define)
141 | true
142 | false
143 | true
144 | true
145 | true
146 |
147 |
148 | false
149 |
150 |
151 | false
152 | RELEASE;$(DCC_Define)
153 | 0
154 | 0
155 |
156 |
157 |
158 | MainSource
159 |
160 |
161 | Cfg_2
162 | Base
163 |
164 |
165 | Base
166 |
167 |
168 | Cfg_1
169 | Base
170 |
171 |
172 |
173 | Delphi.Personality.12
174 | Application
175 |
176 |
177 |
178 | GetTester.dpr
179 |
180 |
181 |
182 |
183 |
184 | true
185 |
186 |
187 |
188 |
189 | true
190 |
191 |
192 |
193 |
194 | true
195 |
196 |
197 |
198 |
199 |
200 | 1
201 |
202 |
203 | Contents\MacOS
204 | 1
205 |
206 |
207 | 0
208 |
209 |
210 |
211 |
212 | classes
213 | 64
214 |
215 |
216 | classes
217 | 64
218 |
219 |
220 |
221 |
222 | classes
223 | 1
224 |
225 |
226 | classes
227 | 1
228 |
229 |
230 |
231 |
232 | res\xml
233 | 1
234 |
235 |
236 | res\xml
237 | 1
238 |
239 |
240 |
241 |
242 | library\lib\armeabi-v7a
243 | 1
244 |
245 |
246 |
247 |
248 | library\lib\armeabi
249 | 1
250 |
251 |
252 | library\lib\armeabi
253 | 1
254 |
255 |
256 |
257 |
258 | library\lib\armeabi-v7a
259 | 1
260 |
261 |
262 |
263 |
264 | library\lib\mips
265 | 1
266 |
267 |
268 | library\lib\mips
269 | 1
270 |
271 |
272 |
273 |
274 | library\lib\armeabi-v7a
275 | 1
276 |
277 |
278 | library\lib\arm64-v8a
279 | 1
280 |
281 |
282 |
283 |
284 | library\lib\armeabi-v7a
285 | 1
286 |
287 |
288 |
289 |
290 | res\drawable
291 | 1
292 |
293 |
294 | res\drawable
295 | 1
296 |
297 |
298 |
299 |
300 | res\values
301 | 1
302 |
303 |
304 | res\values
305 | 1
306 |
307 |
308 |
309 |
310 | res\values-v21
311 | 1
312 |
313 |
314 | res\values-v21
315 | 1
316 |
317 |
318 |
319 |
320 | res\values
321 | 1
322 |
323 |
324 | res\values
325 | 1
326 |
327 |
328 |
329 |
330 | res\drawable
331 | 1
332 |
333 |
334 | res\drawable
335 | 1
336 |
337 |
338 |
339 |
340 | res\drawable-xxhdpi
341 | 1
342 |
343 |
344 | res\drawable-xxhdpi
345 | 1
346 |
347 |
348 |
349 |
350 | res\drawable-xxxhdpi
351 | 1
352 |
353 |
354 | res\drawable-xxxhdpi
355 | 1
356 |
357 |
358 |
359 |
360 | res\drawable-ldpi
361 | 1
362 |
363 |
364 | res\drawable-ldpi
365 | 1
366 |
367 |
368 |
369 |
370 | res\drawable-mdpi
371 | 1
372 |
373 |
374 | res\drawable-mdpi
375 | 1
376 |
377 |
378 |
379 |
380 | res\drawable-hdpi
381 | 1
382 |
383 |
384 | res\drawable-hdpi
385 | 1
386 |
387 |
388 |
389 |
390 | res\drawable-xhdpi
391 | 1
392 |
393 |
394 | res\drawable-xhdpi
395 | 1
396 |
397 |
398 |
399 |
400 | res\drawable-mdpi
401 | 1
402 |
403 |
404 | res\drawable-mdpi
405 | 1
406 |
407 |
408 |
409 |
410 | res\drawable-hdpi
411 | 1
412 |
413 |
414 | res\drawable-hdpi
415 | 1
416 |
417 |
418 |
419 |
420 | res\drawable-xhdpi
421 | 1
422 |
423 |
424 | res\drawable-xhdpi
425 | 1
426 |
427 |
428 |
429 |
430 | res\drawable-xxhdpi
431 | 1
432 |
433 |
434 | res\drawable-xxhdpi
435 | 1
436 |
437 |
438 |
439 |
440 | res\drawable-xxxhdpi
441 | 1
442 |
443 |
444 | res\drawable-xxxhdpi
445 | 1
446 |
447 |
448 |
449 |
450 | res\drawable-small
451 | 1
452 |
453 |
454 | res\drawable-small
455 | 1
456 |
457 |
458 |
459 |
460 | res\drawable-normal
461 | 1
462 |
463 |
464 | res\drawable-normal
465 | 1
466 |
467 |
468 |
469 |
470 | res\drawable-large
471 | 1
472 |
473 |
474 | res\drawable-large
475 | 1
476 |
477 |
478 |
479 |
480 | res\drawable-xlarge
481 | 1
482 |
483 |
484 | res\drawable-xlarge
485 | 1
486 |
487 |
488 |
489 |
490 | res\values
491 | 1
492 |
493 |
494 | res\values
495 | 1
496 |
497 |
498 |
499 |
500 | 1
501 |
502 |
503 | Contents\MacOS
504 | 1
505 |
506 |
507 | 0
508 |
509 |
510 |
511 |
512 | Contents\MacOS
513 | 1
514 | .framework
515 |
516 |
517 | Contents\MacOS
518 | 1
519 | .framework
520 |
521 |
522 | 0
523 |
524 |
525 |
526 |
527 | 1
528 | .dylib
529 |
530 |
531 | 1
532 | .dylib
533 |
534 |
535 | 1
536 | .dylib
537 |
538 |
539 | Contents\MacOS
540 | 1
541 | .dylib
542 |
543 |
544 | Contents\MacOS
545 | 1
546 | .dylib
547 |
548 |
549 | 0
550 | .dll;.bpl
551 |
552 |
553 |
554 |
555 | 1
556 | .dylib
557 |
558 |
559 | 1
560 | .dylib
561 |
562 |
563 | 1
564 | .dylib
565 |
566 |
567 | Contents\MacOS
568 | 1
569 | .dylib
570 |
571 |
572 | Contents\MacOS
573 | 1
574 | .dylib
575 |
576 |
577 | 0
578 | .bpl
579 |
580 |
581 |
582 |
583 | 0
584 |
585 |
586 | 0
587 |
588 |
589 | 0
590 |
591 |
592 | 0
593 |
594 |
595 | 0
596 |
597 |
598 | Contents\Resources\StartUp\
599 | 0
600 |
601 |
602 | Contents\Resources\StartUp\
603 | 0
604 |
605 |
606 | 0
607 |
608 |
609 |
610 |
611 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
612 | 1
613 |
614 |
615 |
616 |
617 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
618 | 1
619 |
620 |
621 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
622 | 1
623 |
624 |
625 |
626 |
627 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
628 | 1
629 |
630 |
631 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
632 | 1
633 |
634 |
635 |
636 |
637 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
638 | 1
639 |
640 |
641 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
642 | 1
643 |
644 |
645 |
646 |
647 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
648 | 1
649 |
650 |
651 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
652 | 1
653 |
654 |
655 |
656 |
657 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
658 | 1
659 |
660 |
661 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
662 | 1
663 |
664 |
665 |
666 |
667 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
668 | 1
669 |
670 |
671 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
672 | 1
673 |
674 |
675 |
676 |
677 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
678 | 1
679 |
680 |
681 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
682 | 1
683 |
684 |
685 |
686 |
687 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
688 | 1
689 |
690 |
691 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
692 | 1
693 |
694 |
695 |
696 |
697 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
698 | 1
699 |
700 |
701 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
702 | 1
703 |
704 |
705 |
706 |
707 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
708 | 1
709 |
710 |
711 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
712 | 1
713 |
714 |
715 |
716 |
717 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
718 | 1
719 |
720 |
721 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
722 | 1
723 |
724 |
725 |
726 |
727 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
728 | 1
729 |
730 |
731 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
732 | 1
733 |
734 |
735 |
736 |
737 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
738 | 1
739 |
740 |
741 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
742 | 1
743 |
744 |
745 |
746 |
747 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
748 | 1
749 |
750 |
751 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
752 | 1
753 |
754 |
755 |
756 |
757 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
758 | 1
759 |
760 |
761 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
762 | 1
763 |
764 |
765 |
766 |
767 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
768 | 1
769 |
770 |
771 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
772 | 1
773 |
774 |
775 |
776 |
777 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
778 | 1
779 |
780 |
781 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
782 | 1
783 |
784 |
785 |
786 |
787 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
788 | 1
789 |
790 |
791 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
792 | 1
793 |
794 |
795 |
796 |
797 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
798 | 1
799 |
800 |
801 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset
802 | 1
803 |
804 |
805 |
806 |
807 | 1
808 |
809 |
810 | 1
811 |
812 |
813 |
814 |
815 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
816 | 1
817 |
818 |
819 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
820 | 1
821 |
822 |
823 |
824 |
825 | ..\
826 | 1
827 |
828 |
829 | ..\
830 | 1
831 |
832 |
833 |
834 |
835 | 1
836 |
837 |
838 | 1
839 |
840 |
841 | 1
842 |
843 |
844 |
845 |
846 | ..\$(PROJECTNAME).launchscreen
847 | 64
848 |
849 |
850 | ..\$(PROJECTNAME).launchscreen
851 | 64
852 |
853 |
854 |
855 |
856 | 1
857 |
858 |
859 | 1
860 |
861 |
862 | 1
863 |
864 |
865 |
866 |
867 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
868 | 1
869 |
870 |
871 |
872 |
873 | ..\
874 | 1
875 |
876 |
877 | ..\
878 | 1
879 |
880 |
881 |
882 |
883 | Contents
884 | 1
885 |
886 |
887 | Contents
888 | 1
889 |
890 |
891 |
892 |
893 | Contents\Resources
894 | 1
895 |
896 |
897 | Contents\Resources
898 | 1
899 |
900 |
901 |
902 |
903 | library\lib\armeabi-v7a
904 | 1
905 |
906 |
907 | library\lib\arm64-v8a
908 | 1
909 |
910 |
911 | 1
912 |
913 |
914 | 1
915 |
916 |
917 | 1
918 |
919 |
920 | 1
921 |
922 |
923 | Contents\MacOS
924 | 1
925 |
926 |
927 | Contents\MacOS
928 | 1
929 |
930 |
931 | 0
932 |
933 |
934 |
935 |
936 | library\lib\armeabi-v7a
937 | 1
938 |
939 |
940 |
941 |
942 | 1
943 |
944 |
945 | 1
946 |
947 |
948 |
949 |
950 | Assets
951 | 1
952 |
953 |
954 | Assets
955 | 1
956 |
957 |
958 |
959 |
960 | Assets
961 | 1
962 |
963 |
964 | Assets
965 | 1
966 |
967 |
968 |
969 |
970 |
971 |
972 |
973 |
974 |
975 |
976 |
977 |
978 |
979 |
980 |
981 |
982 | False
983 | False
984 | False
985 | False
986 | True
987 | False
988 |
989 |
990 | 12
991 |
992 |
993 |
994 |
995 |
996 |
--------------------------------------------------------------------------------
/Tester/GetTester.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HemulGM/MiniWebServer/37769fea8d1e6527773d4279351e2a02ae69111f/Tester/GetTester.res
--------------------------------------------------------------------------------
/Win32/Debug/www/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HemulGM/MiniWebServer/37769fea8d1e6527773d4279351e2a02ae69111f/Win32/Debug/www/favicon.ico
--------------------------------------------------------------------------------