├── samples ├── hello │ ├── server_EASResource.rc │ ├── server_EAS.res │ ├── server_EAS.dres │ ├── server_EAS.dpr │ ├── routes │ ├── server_EAS.skincfg │ ├── uMyController.pas │ ├── uMain.pas │ ├── uMain.dfm │ └── server_EAS.dproj ├── GET QueryParam │ ├── GetQueryParamResource.rc │ ├── GetQueryParam.res │ ├── GetQueryParam.dres │ ├── routes │ ├── GetQueryParam.dpr │ ├── uMyController.pas │ ├── uMain.pas │ ├── GetQueryParam.skincfg │ ├── uMain.dfm │ └── GetQueryParam.dproj ├── SimpleStaticHTML │ ├── SimpleStaticHTML_EASResource.rc │ ├── SimpleStaticHTML_EAS.dres │ ├── SimpleStaticHTML_EAS.res │ ├── routes │ ├── SimpleStaticHTML_EAS.dpr │ ├── uMainController.pas │ ├── uMain.pas │ ├── uMain.dfm │ └── SimpleStaticHTML_EAS.dproj └── ProjectGroup.groupproj ├── src ├── controller.pas ├── HTTPServer.response.page.pas ├── HTTPServer.pas └── routes.pas ├── .gitignore ├── README.md └── lib ├── class_.util.pas └── parameter.pas /samples/hello/server_EASResource.rc: -------------------------------------------------------------------------------- 1 | routes RCDATA "routes" 2 | -------------------------------------------------------------------------------- /samples/GET QueryParam/GetQueryParamResource.rc: -------------------------------------------------------------------------------- 1 | routes RCDATA "routes" 2 | -------------------------------------------------------------------------------- /samples/SimpleStaticHTML/SimpleStaticHTML_EASResource.rc: -------------------------------------------------------------------------------- 1 | routes RCDATA "..\\hello\\routes" 2 | -------------------------------------------------------------------------------- /src/controller.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gutierrydsn/endpoint-access-service-for-delphi/HEAD/src/controller.pas -------------------------------------------------------------------------------- /samples/hello/server_EAS.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gutierrydsn/endpoint-access-service-for-delphi/HEAD/samples/hello/server_EAS.res -------------------------------------------------------------------------------- /samples/hello/server_EAS.dres: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gutierrydsn/endpoint-access-service-for-delphi/HEAD/samples/hello/server_EAS.dres -------------------------------------------------------------------------------- /samples/GET QueryParam/GetQueryParam.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gutierrydsn/endpoint-access-service-for-delphi/HEAD/samples/GET QueryParam/GetQueryParam.res -------------------------------------------------------------------------------- /samples/GET QueryParam/GetQueryParam.dres: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gutierrydsn/endpoint-access-service-for-delphi/HEAD/samples/GET QueryParam/GetQueryParam.dres -------------------------------------------------------------------------------- /samples/SimpleStaticHTML/SimpleStaticHTML_EAS.dres: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gutierrydsn/endpoint-access-service-for-delphi/HEAD/samples/SimpleStaticHTML/SimpleStaticHTML_EAS.dres -------------------------------------------------------------------------------- /samples/SimpleStaticHTML/SimpleStaticHTML_EAS.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gutierrydsn/endpoint-access-service-for-delphi/HEAD/samples/SimpleStaticHTML/SimpleStaticHTML_EAS.res -------------------------------------------------------------------------------- /samples/GET QueryParam/routes: -------------------------------------------------------------------------------- 1 | "GET" : { 2 | "/api/hello/" : "uMyController.MyController.hello" 3 | }, 4 | 5 | 6 | "POST" : {}, 7 | 8 | "DELETE" : {}, 9 | 10 | "PUT" : {} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.dcu 2 | *.exe 3 | *.dll 4 | *.orig 5 | *.bkp 6 | *.bak 7 | *.~* 8 | *.vlb 9 | *.identcache 10 | *.stat 11 | *.local 12 | *.identcache 13 | *.nbLog 14 | .orig 15 | */__recovery/* 16 | */bin/* 17 | */Win32/* 18 | */__history/* 19 | 20 | -------------------------------------------------------------------------------- /samples/SimpleStaticHTML/routes: -------------------------------------------------------------------------------- 1 | "GET" : { 2 | "/api/version/" : "uMainController.mainController.version", 3 | "/api/ping/" : "uMainController.mainController.ping" 4 | 5 | }, 6 | "POST" : { 7 | }, 8 | 9 | "DELETE" : {}, 10 | 11 | "PUT" : {} 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ABOUT 2 | This library was created to facilitate the development of web services adopting the market standard. Using a mapping file of routes in this way defining the method to be published. 3 | 4 | * [Exemplo de Uso] 5 | 6 | **Free Software, Hell Yeah!** 7 | 8 | [Exemplo de Uso]: -------------------------------------------------------------------------------- /samples/hello/server_EAS.dpr: -------------------------------------------------------------------------------- 1 | program server_EAS; 2 | 3 | {$R *.dres} 4 | 5 | uses 6 | Vcl.Forms, 7 | uMain in 'uMain.pas' {Form1}, 8 | uMyController in 'uMyController.pas'; 9 | 10 | {$R *.res} 11 | 12 | begin 13 | Application.Initialize; 14 | Application.MainFormOnTaskbar := True; 15 | Application.CreateForm(TForm1, Form1); 16 | Application.Run; 17 | end. 18 | -------------------------------------------------------------------------------- /samples/GET QueryParam/GetQueryParam.dpr: -------------------------------------------------------------------------------- 1 | program GetQueryParam; 2 | 3 | {$R *.dres} 4 | 5 | uses 6 | Vcl.Forms, 7 | uMain in 'uMain.pas' {frmMain}, 8 | uMyController in 'uMyController.pas'; 9 | 10 | {$R *.res} 11 | 12 | begin 13 | Application.Initialize; 14 | Application.MainFormOnTaskbar := True; 15 | Application.CreateForm(TfrmMain, frmMain); 16 | Application.Run; 17 | end. 18 | -------------------------------------------------------------------------------- /samples/SimpleStaticHTML/SimpleStaticHTML_EAS.dpr: -------------------------------------------------------------------------------- 1 | program SimpleStaticHTML_EAS; 2 | 3 | {$R *.dres} 4 | 5 | uses 6 | Vcl.Forms, 7 | uMain in '..\hello\uMain.pas' {Form1}, 8 | uMainController in 'uMainController.pas'; 9 | 10 | {$R *.res} 11 | begin 12 | Application.Initialize; 13 | Application.MainFormOnTaskbar := True; 14 | Application.CreateForm(TForm1, Form1); 15 | Application.Run; 16 | end. 17 | -------------------------------------------------------------------------------- /samples/GET QueryParam/uMyController.pas: -------------------------------------------------------------------------------- 1 | unit uMyController; 2 | 3 | interface 4 | uses System.SysUtils,System.Classes, controller; 5 | 6 | type 7 | MyController = class (TController) 8 | public 9 | function hello : String; 10 | end; 11 | 12 | implementation 13 | 14 | function MyController.hello: String; 15 | begin 16 | result := 'Hello '+ QueryParamByName('nome') +'!'; 17 | end; 18 | 19 | 20 | initialization 21 | RegisterClass(MyController); 22 | 23 | finalization 24 | UnRegisterClass(MyController); 25 | end. 26 | -------------------------------------------------------------------------------- /samples/hello/routes: -------------------------------------------------------------------------------- 1 | "GET" : { 2 | "/api/version" : "uMyController.mainController.version" 3 | "/api/ping" : "uMyController.MyController.ping" 4 | 5 | "/api/hello/:param1" : "uMyController.MyController.helloWithParamInt(param1)" 6 | "/api/hello/:param1/:param2" : "uMyController.MyController.helloWithParam(param1,param2)" 7 | 8 | "/api/hello/:param1/:param2/:param3/:param4" : "uMyController.MyController.helloWithAllParam(param1,param2,param3,param4)" 9 | }, 10 | 11 | 12 | "POST" : {}, 13 | 14 | "DELETE" : {}, 15 | 16 | "PUT" : {} 17 | -------------------------------------------------------------------------------- /samples/SimpleStaticHTML/uMainController.pas: -------------------------------------------------------------------------------- 1 | unit uMainController; 2 | 3 | interface 4 | uses System.SysUtils,System.Classes, controller; 5 | 6 | type 7 | mainController = class (TController) 8 | public 9 | class var nrVersion : String; 10 | 11 | function version : String; 12 | function ping : String; 13 | end; 14 | 15 | implementation 16 | 17 | function mainController.version: String; 18 | const 19 | response = '{"version" : "%s"}'; 20 | begin 21 | result := Format(response, [nrVersion]); 22 | end; 23 | 24 | 25 | function mainController.ping : String; 26 | const 27 | response = '{"response" : "true"}'; 28 | begin 29 | result := response; 30 | end; 31 | 32 | initialization 33 | RegisterClass(mainController); 34 | 35 | finalization 36 | UnRegisterClass(mainController); 37 | end. 38 | -------------------------------------------------------------------------------- /samples/GET QueryParam/uMain.pas: -------------------------------------------------------------------------------- 1 | unit uMain; 2 | 3 | interface 4 | 5 | uses 6 | Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 7 | Vcl.Controls, Vcl.Forms, Vcl.Dialogs, HTTPServer, Vcl.StdCtrls, Vcl.ExtCtrls; 8 | 9 | type 10 | TfrmMain = class(TForm) 11 | pnl_config_porta: TPanel; 12 | edt_porta: TEdit; 13 | value_porta: TEdit; 14 | pnl_bottom: TPanel; 15 | ButtonStart: TButton; 16 | procedure FormCreate(Sender: TObject); 17 | procedure ButtonStartClick(Sender: TObject); 18 | private 19 | { Private declarations } 20 | public 21 | HTTPServer : THTTPServer; 22 | end; 23 | 24 | var 25 | frmMain: TfrmMain; 26 | 27 | implementation 28 | 29 | {$R *.dfm} 30 | 31 | procedure TfrmMain.ButtonStartClick(Sender: TObject); 32 | begin 33 | HTTPServer.DefaultPort := StrToIntDef(value_porta.Text,9090); 34 | HTTPServer.Active := not(HTTPServer.Active); 35 | 36 | if (HTTPServer.Active) then 37 | ButtonStart.Caption := 'Stop' 38 | else 39 | ButtonStart.Caption := 'Start' 40 | end; 41 | 42 | procedure TfrmMain.FormCreate(Sender: TObject); 43 | begin 44 | HTTPServer := THTTPServer.Create(Self); 45 | end; 46 | 47 | end. 48 | -------------------------------------------------------------------------------- /src/HTTPServer.response.page.pas: -------------------------------------------------------------------------------- 1 | unit HTTPServer.response.page; 2 | 3 | interface 4 | 5 | uses 6 | IdCustomHTTPServer; 7 | 8 | type 9 | HTTPServerResponsePage = class 10 | class function return_404(AResponseInfo: TIdHTTPResponseInfo) : String; 11 | end; 12 | 13 | implementation 14 | 15 | { HTTPServerResponsePage } 16 | 17 | class function HTTPServerResponsePage.return_404(AResponseInfo: TIdHTTPResponseInfo): String; 18 | begin 19 | AResponseInfo.ResponseNo := 404; 20 | result := ' '+ 28 | ' '+ 29 | '
'+ 30 | '

Code status 404

'+ 31 | '
'+ 32 | '

'+ 33 | ' Route does not implement'+ 34 | '

' 35 | end; 36 | 37 | end. 38 | -------------------------------------------------------------------------------- /samples/hello/server_EAS.skincfg: -------------------------------------------------------------------------------- 1 | [ExpressSkins] 2 | Default=0 3 | ShowNotifications=1 4 | Enabled=1 5 | dxSkinBlack=1 6 | dxSkinBlue=1 7 | dxSkinBlueprint=1 8 | dxSkinCaramel=1 9 | dxSkinCoffee=1 10 | dxSkinDarkRoom=1 11 | dxSkinDarkSide=1 12 | dxSkinDevExpressDarkStyle=1 13 | dxSkinDevExpressStyle=1 14 | dxSkinFoggy=1 15 | dxSkinGlassOceans=1 16 | dxSkinHighContrast=1 17 | dxSkiniMaginary=1 18 | dxSkinLilian=1 19 | dxSkinLiquidSky=1 20 | dxSkinLondonLiquidSky=1 21 | dxSkinMcSkin=1 22 | dxSkinMetropolis=1 23 | dxSkinMetropolisDark=1 24 | dxSkinMoneyTwins=1 25 | dxSkinOffice2007Black=1 26 | dxSkinOffice2007Blue=1 27 | dxSkinOffice2007Green=1 28 | dxSkinOffice2007Pink=1 29 | dxSkinOffice2007Silver=1 30 | dxSkinOffice2010Black=1 31 | dxSkinOffice2010Blue=1 32 | dxSkinOffice2010Silver=1 33 | dxSkinOffice2013DarkGray=1 34 | dxSkinOffice2013LightGray=1 35 | dxSkinOffice2013White=1 36 | dxSkinOffice2016Colorful=1 37 | dxSkinOffice2016Dark=1 38 | dxSkinPumpkin=1 39 | dxSkinSeven=1 40 | dxSkinSevenClassic=1 41 | dxSkinSharp=1 42 | dxSkinSharpPlus=1 43 | dxSkinSilver=1 44 | dxSkinSpringTime=1 45 | dxSkinStardust=1 46 | dxSkinSummer2008=1 47 | dxSkinTheAsphaltWorld=1 48 | dxSkinsDefaultPainters=1 49 | dxSkinValentine=1 50 | dxSkinVisualStudio2013Blue=1 51 | dxSkinVisualStudio2013Dark=1 52 | dxSkinVisualStudio2013Light=1 53 | dxSkinVS2010=1 54 | dxSkinWhiteprint=1 55 | dxSkinXmas2008Blue=1 56 | -------------------------------------------------------------------------------- /samples/GET QueryParam/GetQueryParam.skincfg: -------------------------------------------------------------------------------- 1 | [ExpressSkins] 2 | Default=0 3 | ShowNotifications=1 4 | Enabled=1 5 | dxSkinBlack=1 6 | dxSkinBlue=1 7 | dxSkinBlueprint=1 8 | dxSkinCaramel=1 9 | dxSkinCoffee=1 10 | dxSkinDarkRoom=1 11 | dxSkinDarkSide=1 12 | dxSkinDevExpressDarkStyle=1 13 | dxSkinDevExpressStyle=1 14 | dxSkinFoggy=1 15 | dxSkinGlassOceans=1 16 | dxSkinHighContrast=1 17 | dxSkiniMaginary=1 18 | dxSkinLilian=1 19 | dxSkinLiquidSky=1 20 | dxSkinLondonLiquidSky=1 21 | dxSkinMcSkin=1 22 | dxSkinMetropolis=1 23 | dxSkinMetropolisDark=1 24 | dxSkinMoneyTwins=1 25 | dxSkinOffice2007Black=1 26 | dxSkinOffice2007Blue=1 27 | dxSkinOffice2007Green=1 28 | dxSkinOffice2007Pink=1 29 | dxSkinOffice2007Silver=1 30 | dxSkinOffice2010Black=1 31 | dxSkinOffice2010Blue=1 32 | dxSkinOffice2010Silver=1 33 | dxSkinOffice2013DarkGray=1 34 | dxSkinOffice2013LightGray=1 35 | dxSkinOffice2013White=1 36 | dxSkinOffice2016Colorful=1 37 | dxSkinOffice2016Dark=1 38 | dxSkinPumpkin=1 39 | dxSkinSeven=1 40 | dxSkinSevenClassic=1 41 | dxSkinSharp=1 42 | dxSkinSharpPlus=1 43 | dxSkinSilver=1 44 | dxSkinSpringTime=1 45 | dxSkinStardust=1 46 | dxSkinSummer2008=1 47 | dxSkinTheAsphaltWorld=1 48 | dxSkinsDefaultPainters=1 49 | dxSkinValentine=1 50 | dxSkinVisualStudio2013Blue=1 51 | dxSkinVisualStudio2013Dark=1 52 | dxSkinVisualStudio2013Light=1 53 | dxSkinVS2010=1 54 | dxSkinWhiteprint=1 55 | dxSkinXmas2008Blue=1 56 | -------------------------------------------------------------------------------- /samples/hello/uMyController.pas: -------------------------------------------------------------------------------- 1 | unit uMyController; 2 | 3 | interface 4 | uses System.SysUtils,System.Classes, controller, System.Rtti; 5 | 6 | type 7 | 8 | {$METHODINFO ON} 9 | MyController = class (TController) 10 | public 11 | function ping : String; 12 | function hello : String; 13 | function helloWithParam(param : String; parami : integer) : String; 14 | function helloWithAllParam(param1 : String; param2 : integer; param3 : String; param4 : String) : String; 15 | function helloWithParamInt(param: integer): String; 16 | end; 17 | {$METHODINFO OFF} 18 | 19 | implementation 20 | 21 | function MyController.hello: String; 22 | begin 23 | result := 'Hello!'; 24 | end; 25 | 26 | 27 | function MyController.helloWithAllParam(param1: String; param2: integer; param3,param4: String): String; 28 | begin 29 | result := 'ok'; 30 | end; 31 | 32 | function MyController.helloWithParam(param: String;parami : integer): String; 33 | begin 34 | result := 'Hello '+ param + ' - ' + parami.ToString +'! '; 35 | end; 36 | 37 | function MyController.helloWithParamInt(param: integer): String; 38 | begin 39 | result := 'Hello '+ param.ToString ; 40 | end; 41 | 42 | 43 | function MyController.ping: String; 44 | begin 45 | result := 'OK'; 46 | end; 47 | 48 | initialization 49 | RegisterClass(MyController); 50 | 51 | finalization 52 | UnRegisterClass(MyController); 53 | end. 54 | -------------------------------------------------------------------------------- /samples/hello/uMain.pas: -------------------------------------------------------------------------------- 1 | unit uMain; 2 | 3 | interface 4 | 5 | uses 6 | Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 7 | Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, HTTPServer; 8 | 9 | type 10 | TForm1 = class(TForm) 11 | pnl_config_porta: TPanel; 12 | edt_porta: TEdit; 13 | value_porta: TEdit; 14 | pnl_bottom: TPanel; 15 | ButtonStart: TButton; 16 | procedure FormCreate(Sender: TObject); 17 | procedure ButtonStartClick(Sender: TObject); 18 | private 19 | { Private declarations } 20 | public 21 | HTTPServer : THTTPServer; 22 | end; 23 | 24 | var 25 | Form1: TForm1; 26 | 27 | implementation 28 | 29 | {$R *.dfm} 30 | 31 | procedure TForm1.ButtonStartClick(Sender: TObject); 32 | begin 33 | HTTPServer.DefaultPort := StrToIntDef(value_porta.Text,9090); 34 | 35 | //pega os arquivos de um arquivo de recurso 36 | HTTPServer.PathResource:= ''; 37 | 38 | //pega os arquivos de um diretorio abaixo do exe 39 | HTTPServer.PathResource:= ''; 40 | 41 | HTTPServer.Active := not(HTTPServer.Active); 42 | 43 | if (HTTPServer.Active) then 44 | ButtonStart.Caption := 'Stop' 45 | else 46 | ButtonStart.Caption := 'Start' 47 | end; 48 | 49 | procedure TForm1.FormCreate(Sender: TObject); 50 | begin 51 | HTTPServer := THTTPServer.Create(Self); 52 | end; 53 | 54 | end. 55 | -------------------------------------------------------------------------------- /samples/SimpleStaticHTML/uMain.pas: -------------------------------------------------------------------------------- 1 | unit uMain; 2 | 3 | interface 4 | 5 | uses 6 | Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 7 | Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, HTTPServer, uMainController; 8 | 9 | type 10 | TForm1 = class(TForm) 11 | pnl_config_porta: TPanel; 12 | edt_porta: TEdit; 13 | value_porta: TEdit; 14 | pnl_bottom: TPanel; 15 | ButtonStart: TButton; 16 | Panel1: TPanel; 17 | Edit1: TEdit; 18 | value_version: TEdit; 19 | Panel2: TPanel; 20 | Edit2: TEdit; 21 | StaticPath: TEdit; 22 | procedure FormCreate(Sender: TObject); 23 | procedure ButtonStartClick(Sender: TObject); 24 | private 25 | { Private declarations } 26 | public 27 | HTTPServer : THTTPServer; 28 | end; 29 | 30 | var 31 | Form1: TForm1; 32 | 33 | implementation 34 | 35 | {$R *.dfm} 36 | 37 | procedure TForm1.ButtonStartClick(Sender: TObject); 38 | begin 39 | mainController.nrVersion := value_version.Text; 40 | 41 | HTTPServer.DefaultPort := StrToIntDef(value_porta.Text, 9090); 42 | HTTPServer.PathResource := StaticPath.Text; 43 | HTTPServer.AllowAllCors := true; 44 | HTTPServer.Active := not(HTTPServer.Active); 45 | 46 | if (HTTPServer.Active) then 47 | ButtonStart.Caption := 'Stop' 48 | else 49 | ButtonStart.Caption := 'Start' 50 | end; 51 | 52 | procedure TForm1.FormCreate(Sender: TObject); 53 | begin 54 | HTTPServer := THTTPServer.Create(Self); 55 | end; 56 | 57 | end. 58 | -------------------------------------------------------------------------------- /lib/class_.util.pas: -------------------------------------------------------------------------------- 1 | unit class_.util; 2 | 3 | interface 4 | Uses System.Rtti, System.SysUtils; 5 | type 6 | TArrayValue = Array of Variant; 7 | 8 | TClassUtil = class 9 | public 10 | class function instantiateClassViaRTTI(value: TValue) : TObject; 11 | end; 12 | 13 | implementation 14 | 15 | class function TClassUtil.instantiateClassViaRTTI(value: TValue): TObject; 16 | var 17 | context : TRttiContext; 18 | instance : TRttiInstanceType; 19 | rtti_type: TRttiType; 20 | error : String; 21 | begin 22 | result := nil; 23 | try 24 | case value.Kind of 25 | tkString , 26 | tkLString, 27 | tkWString, 28 | tkUString: 29 | begin 30 | error := value.AsString+' classe not found'; 31 | instance:= TRttiInstanceType(context.FindType(value.AsString)); 32 | result := instance.MetaclassType.Create; 33 | end; 34 | tkClassRef: 35 | begin 36 | error := 'the parameter must be of type Tclass'+sLineBreak; 37 | rtti_type := context.GetType(value.AsClass); 38 | instance := (context.FindType(rtti_type.QualifiedName) as TRttiInstanceType); 39 | 40 | result := instance.MetaclassType.Create; 41 | end; 42 | else 43 | begin 44 | Error :='The parameter is not valid for'+sLineBreak; 45 | abort; 46 | end; 47 | end; 48 | except 49 | on e : Exception do 50 | begin 51 | raise Exception.Create(error); 52 | end; 53 | end; 54 | end; 55 | 56 | end. 57 | -------------------------------------------------------------------------------- /samples/hello/uMain.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 0 3 | Top = 0 4 | BorderIcons = [biSystemMenu] 5 | Caption = 'EAS for Delphi' 6 | ClientHeight = 56 7 | ClientWidth = 229 8 | Color = clBtnFace 9 | Font.Charset = DEFAULT_CHARSET 10 | Font.Color = clWindowText 11 | Font.Height = -11 12 | Font.Name = 'Tahoma' 13 | Font.Style = [] 14 | OldCreateOrder = False 15 | OnCreate = FormCreate 16 | PixelsPerInch = 96 17 | TextHeight = 13 18 | object pnl_config_porta: TPanel 19 | Left = 0 20 | Top = 0 21 | Width = 229 22 | Height = 25 23 | Align = alTop 24 | TabOrder = 0 25 | object edt_porta: TEdit 26 | Left = 1 27 | Top = 1 28 | Width = 104 29 | Height = 23 30 | Align = alLeft 31 | ReadOnly = True 32 | TabOrder = 0 33 | Text = 'Porta :' 34 | ExplicitHeight = 21 35 | end 36 | object value_porta: TEdit 37 | Left = 105 38 | Top = 1 39 | Width = 123 40 | Height = 23 41 | Align = alClient 42 | NumbersOnly = True 43 | TabOrder = 1 44 | Text = '9090' 45 | ExplicitHeight = 21 46 | end 47 | end 48 | object pnl_bottom: TPanel 49 | Left = 0 50 | Top = 25 51 | Width = 229 52 | Height = 31 53 | Align = alBottom 54 | TabOrder = 1 55 | object ButtonStart: TButton 56 | Left = 136 57 | Top = 1 58 | Width = 92 59 | Height = 29 60 | Align = alRight 61 | Caption = 'Start' 62 | TabOrder = 0 63 | OnClick = ButtonStartClick 64 | end 65 | end 66 | end 67 | -------------------------------------------------------------------------------- /samples/GET QueryParam/uMain.dfm: -------------------------------------------------------------------------------- 1 | object frmMain: TfrmMain 2 | Left = 0 3 | Top = 0 4 | BorderIcons = [biSystemMenu] 5 | Caption = 'Server' 6 | ClientHeight = 57 7 | ClientWidth = 229 8 | Color = clBtnFace 9 | Font.Charset = DEFAULT_CHARSET 10 | Font.Color = clWindowText 11 | Font.Height = -11 12 | Font.Name = 'Tahoma' 13 | Font.Style = [] 14 | OldCreateOrder = False 15 | OnCreate = FormCreate 16 | PixelsPerInch = 96 17 | TextHeight = 13 18 | object pnl_config_porta: TPanel 19 | Left = 0 20 | Top = 0 21 | Width = 229 22 | Height = 25 23 | Align = alTop 24 | TabOrder = 0 25 | object edt_porta: TEdit 26 | Left = 1 27 | Top = 1 28 | Width = 104 29 | Height = 23 30 | Align = alLeft 31 | ReadOnly = True 32 | TabOrder = 0 33 | Text = 'Porta :' 34 | ExplicitHeight = 21 35 | end 36 | object value_porta: TEdit 37 | Left = 105 38 | Top = 1 39 | Width = 123 40 | Height = 23 41 | Align = alClient 42 | NumbersOnly = True 43 | TabOrder = 1 44 | Text = '9090' 45 | ExplicitHeight = 21 46 | end 47 | end 48 | object pnl_bottom: TPanel 49 | Left = 0 50 | Top = 26 51 | Width = 229 52 | Height = 31 53 | Align = alBottom 54 | TabOrder = 1 55 | ExplicitTop = 25 56 | object ButtonStart: TButton 57 | Left = 136 58 | Top = 1 59 | Width = 92 60 | Height = 29 61 | Align = alRight 62 | Caption = 'Start' 63 | TabOrder = 0 64 | OnClick = ButtonStartClick 65 | end 66 | end 67 | end 68 | -------------------------------------------------------------------------------- /samples/ProjectGroup.groupproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | {199FAA0F-E6C1-40A9-93DF-F67813B8E5B0} 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Default.Personality.12 15 | 16 | 17 | 18 | 19 | 20 | 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 | -------------------------------------------------------------------------------- /samples/SimpleStaticHTML/uMain.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 0 3 | Top = 0 4 | BorderIcons = [biSystemMenu] 5 | Caption = 'EAS for Delphi' 6 | ClientHeight = 108 7 | ClientWidth = 229 8 | Color = clBtnFace 9 | Font.Charset = DEFAULT_CHARSET 10 | Font.Color = clWindowText 11 | Font.Height = -11 12 | Font.Name = 'Tahoma' 13 | Font.Style = [] 14 | OldCreateOrder = False 15 | OnCreate = FormCreate 16 | PixelsPerInch = 96 17 | TextHeight = 13 18 | object pnl_config_porta: TPanel 19 | Left = 0 20 | Top = 0 21 | Width = 229 22 | Height = 25 23 | Align = alTop 24 | TabOrder = 0 25 | object edt_porta: TEdit 26 | Left = 1 27 | Top = 1 28 | Width = 104 29 | Height = 23 30 | Align = alLeft 31 | ReadOnly = True 32 | TabOrder = 0 33 | Text = 'Porta :' 34 | ExplicitHeight = 21 35 | end 36 | object value_porta: TEdit 37 | Left = 105 38 | Top = 1 39 | Width = 123 40 | Height = 23 41 | Align = alClient 42 | NumbersOnly = True 43 | TabOrder = 1 44 | Text = '9090' 45 | ExplicitHeight = 21 46 | end 47 | end 48 | object pnl_bottom: TPanel 49 | Left = 0 50 | Top = 77 51 | Width = 229 52 | Height = 31 53 | Align = alBottom 54 | TabOrder = 1 55 | ExplicitTop = 25 56 | object ButtonStart: TButton 57 | Left = 136 58 | Top = 1 59 | Width = 92 60 | Height = 29 61 | Align = alRight 62 | Caption = 'Start' 63 | TabOrder = 0 64 | OnClick = ButtonStartClick 65 | end 66 | end 67 | object Panel1: TPanel 68 | Left = 0 69 | Top = 50 70 | Width = 229 71 | Height = 25 72 | Align = alTop 73 | TabOrder = 2 74 | ExplicitTop = 8 75 | object Edit1: TEdit 76 | Left = 1 77 | Top = 1 78 | Width = 104 79 | Height = 23 80 | Align = alLeft 81 | ReadOnly = True 82 | TabOrder = 0 83 | Text = 'Version :' 84 | ExplicitHeight = 21 85 | end 86 | object value_version: TEdit 87 | Left = 105 88 | Top = 1 89 | Width = 123 90 | Height = 23 91 | Align = alClient 92 | TabOrder = 1 93 | Text = '1.0.2' 94 | ExplicitLeft = 111 95 | ExplicitTop = -1 96 | end 97 | end 98 | object Panel2: TPanel 99 | Left = 0 100 | Top = 25 101 | Width = 229 102 | Height = 25 103 | Align = alTop 104 | TabOrder = 3 105 | object Edit2: TEdit 106 | Left = 1 107 | Top = 1 108 | Width = 104 109 | Height = 23 110 | Align = alLeft 111 | ReadOnly = True 112 | TabOrder = 0 113 | Text = 'PathResource' 114 | ExplicitLeft = -5 115 | ExplicitTop = -3 116 | end 117 | object StaticPath: TEdit 118 | Left = 105 119 | Top = 1 120 | Width = 123 121 | Height = 23 122 | Align = alClient 123 | TabOrder = 1 124 | Text = 'www' 125 | ExplicitHeight = 21 126 | end 127 | end 128 | end 129 | -------------------------------------------------------------------------------- /lib/parameter.pas: -------------------------------------------------------------------------------- 1 | unit parameter; 2 | 3 | interface 4 | uses System.Classes, System.SysUtils, class_.util, System.Rtti; 5 | 6 | type 7 | TparameterType =(ptInteger, ptString, ptFloat, ptBoolean); 8 | 9 | TParameter = class 10 | private 11 | fname : String ; 12 | fvalue : variant; 13 | fparam_type : TparameterType; 14 | public 15 | property name : String read fname write fname; 16 | property value : variant read fvalue write fvalue; 17 | property param_type : TparameterType read fparam_type write fparam_type ; 18 | end; 19 | 20 | TListParameter = array of TParameter; 21 | 22 | TListParameterHelper = record helper for TListParameter 23 | private 24 | function getValueParameter(pValue: String): String; 25 | public 26 | procedure addParameter(parameter : TParameter);overload; 27 | procedure addParameter(name : String);overload; 28 | procedure setParameters(uri, endpoint : String); 29 | 30 | function getArray(pInvert : Boolean = false) : TArrayValue; 31 | function addParameter : TParameter;overload; 32 | function getParameter(name : String) : TParameter; 33 | end; 34 | 35 | const 36 | PREFIX_PARAMETER = ':'; 37 | implementation 38 | 39 | procedure TListParameterHelper.addParameter(parameter: TParameter); 40 | begin 41 | SetLength(self,length(self)+1); 42 | self[length(self)-1] := parameter; 43 | end; 44 | 45 | function TListParameterHelper.addParameter: TParameter; 46 | begin 47 | result := TParameter.Create; 48 | addParameter(result); 49 | end; 50 | 51 | procedure TListParameterHelper.addParameter(name: String); 52 | begin 53 | addParameter.name := name; 54 | end; 55 | 56 | function TListParameterHelper.getArray(pInvert : Boolean): TArrayValue; 57 | var 58 | i : integer; 59 | len : integer; 60 | begin 61 | len := length(Self)-1; 62 | for i := 0 to len do 63 | begin 64 | SetLength(result, i+1); 65 | 66 | result[i] := Self[i].value; 67 | if (pInvert) then 68 | result[i] := Self[len-i].value; 69 | end; 70 | end; 71 | 72 | function TListParameterHelper.getParameter(name: String): TParameter; 73 | var i : integer; 74 | begin 75 | result := nil; 76 | for i := 0 to Length(self)-1 do 77 | begin 78 | if (UpperCase(self[i].name).trim <> UpperCase(name).trim) then 79 | continue; 80 | 81 | result := self[i]; 82 | break; 83 | end; 84 | end; 85 | 86 | procedure TListParameterHelper.setParameters(uri, endpoint : String); 87 | var 88 | i : Integer ; 89 | value : String ; 90 | blocks_route : TStringList; 91 | blocks_uri : TStringList; 92 | begin 93 | blocks_route := TStringList.Create; 94 | blocks_uri := TStringList.Create; 95 | try 96 | blocks_uri.Text := uri.Replace('/',sLineBreak).Trim; 97 | blocks_route.Text := endpoint.Replace('/',sLineBreak).Trim; 98 | 99 | for i := 0 to blocks_route.Count-1 do 100 | begin 101 | if (pos(PREFIX_PARAMETER,blocks_route[i]) <= 0) then 102 | continue; 103 | 104 | value := getValueParameter(blocks_uri[i]); 105 | 106 | getParameter(blocks_route[i].Replace(PREFIX_PARAMETER,EmptyStr)).value := value; 107 | end; 108 | 109 | finally 110 | FreeAndNil(blocks_route); 111 | FreeAndNil(blocks_uri); 112 | end; 113 | end; 114 | 115 | function TListParameterHelper.getValueParameter(pValue : String) : String; 116 | const 117 | values : array of array of string = [ 118 | ['%21', '!'], 119 | ['%22', '"'], 120 | ['%23', '#'], 121 | ['%24', '$'], 122 | ['%25', '%'], 123 | ['%26', '&'], 124 | ['%27', ''''], 125 | ['%28', '('], 126 | ['%29', ')'], 127 | ['%2a', '*'], 128 | ['%2b', '+'], 129 | ['%2c', ','], 130 | ['%2d', '-'], 131 | ['%2e', '.'], 132 | ['%2f', '/'], 133 | ['%3a', ':'], 134 | ['%3b', ';'], 135 | ['%3c', '<'], 136 | ['%3d', '='], 137 | ['%3e', '>'], 138 | ['%3f', '?'], 139 | ['%40', '@'], 140 | ['%5b', '['], 141 | ['%5c', '\'], 142 | ['%5d', ']'], 143 | ['%5e', '^'], 144 | ['%5f', '_'], 145 | ['%60', '`'], 146 | ['%7b', '{'], 147 | ['%7c', '|'], 148 | ['%7d', '}'], 149 | ['%7e', '~'] 150 | ]; 151 | var 152 | i : integer; 153 | begin 154 | result := pValue; 155 | for i := 0 to Length(values)-1 do 156 | result := StringReplace(result, values[i][0], values[i][1], [rfReplaceAll, rfIgnoreCase]); 157 | end; 158 | 159 | end. 160 | -------------------------------------------------------------------------------- /src/HTTPServer.pas: -------------------------------------------------------------------------------- 1 | unit HTTPServer; 2 | 3 | interface 4 | 5 | uses 6 | IdHTTPServer, IdContext, IdCustomHTTPServer, System.Classes, System.Types, 7 | System.SysUtils, IdGlobal, IdGlobalProtocols,idMultipartFormData, 8 | IdCoderQuotedPrintable, IdCoderMIME, IdHeaderList, System.IOUtils; 9 | type 10 | TRequestEvent = function (AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo) : Boolean of object; 11 | 12 | THTTPServer = class(TIdHTTPServer) 13 | private 14 | fProcessing : boolean; 15 | fPathResource : String; 16 | fRequestInfo : TIdHTTPRequestInfo; 17 | fResponseInfo : TIdHTTPResponseInfo; 18 | fAllowAllCors : Boolean; 19 | fonEstablishConnection : TRequestEvent; 20 | 21 | procedure Connect(AContext: TIdContext); 22 | procedure CommandGet(AContext: TIdContext; 23 | ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); 24 | procedure CommandOther(AContext: TIdContext; 25 | ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); 26 | 27 | class var instance : THTTPServer; 28 | function isResource(ARequestInfo: TIdHTTPRequestInfo; 29 | AResponseInfo: TIdHTTPResponseInfo): Boolean; 30 | function getContentType(sExt : String): String; 31 | function getResFile(sFile : String) : String; 32 | 33 | procedure allowCors; 34 | procedure validEstablishConnection(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); 35 | public 36 | constructor Create(AOwner: TComponent);reintroduce; 37 | destructor Destroy; override; 38 | 39 | class function getInstance() : THTTPServer; 40 | 41 | function getLocalServer : String; 42 | published 43 | property AllowAllCors : Boolean read fAllowAllCors write fAllowAllCors; 44 | property PathResource : String read fPathResource write fPathResource; 45 | property RequestInfo : TIdHTTPRequestInfo read fRequestInfo ; 46 | property ResponseInfo : TIdHTTPResponseInfo read fResponseInfo ; 47 | property onEstablishConnection : TRequestEvent read fonEstablishConnection write fonEstablishConnection; 48 | end; 49 | 50 | resourceString 51 | FILE_INDEX = '/index.html'; 52 | DEFAULT_PATH_RESOURCES = 'resource\'; 53 | 54 | implementation 55 | 56 | uses 57 | routes; 58 | 59 | procedure THTTPServer.allowCors; 60 | begin 61 | if not(allowAllCors) then 62 | exit; 63 | 64 | fResponseInfo.CustomHeaders.AddValue('Access-Control-Allow-Origin','*'); 65 | fResponseInfo.CustomHeaders.Values['origin'] := '*'; 66 | fResponseInfo.CustomHeaders.Values['Access-Control-Allow-Headers'] := '*'; 67 | fResponseInfo.CustomHeaders.Values['Access-Control-Expose-Headers'] := '*'; 68 | fResponseInfo.CustomHeaders.Values['Access-Control-Request-Method'] := '*'; 69 | fResponseInfo.CustomHeaders.Values['Access-Control-Request-Headers'] := '*'; 70 | fResponseInfo.CustomHeaders.Values['Access-Control-Allow-Credentials'] := 'true'; 71 | fResponseInfo.CustomHeaders.Values['Access-Control-Allow-Methods'] := '*'; 72 | end; 73 | 74 | procedure THTTPServer.CommandGet(AContext: TIdContext; 75 | ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); 76 | begin 77 | 78 | while (fProcessing) do 79 | Sleep(100); 80 | 81 | fProcessing := true; 82 | try 83 | if (isResource(ARequestInfo, AResponseInfo)) then 84 | exit; 85 | 86 | fRequestInfo := ARequestInfo; 87 | fResponseInfo := AResponseInfo; 88 | 89 | AllowCors(); 90 | validEstablishConnection(AContext, ARequestInfo, AResponseInfo); 91 | 92 | AResponseInfo.ContentText := TRoutes.getInstance.endpoint(ARequestInfo,AResponseInfo); 93 | finally 94 | fProcessing := false; 95 | end; 96 | end; 97 | 98 | procedure THTTPServer.CommandOther(AContext: TIdContext; 99 | ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); 100 | begin 101 | while (fProcessing) do 102 | Sleep(100); 103 | 104 | fProcessing := true; 105 | try 106 | fRequestInfo := ARequestInfo; 107 | fResponseInfo := AResponseInfo; 108 | 109 | AllowCors(); 110 | 111 | if (ARequestInfo.Command = 'OPTIONS') then 112 | begin 113 | AResponseInfo.ResponseNo := 204; 114 | exit; 115 | end; 116 | 117 | validEstablishConnection(AContext, ARequestInfo, AResponseInfo); 118 | AResponseInfo.ContentText := TRoutes.getInstance.endpoint(ARequestInfo,AResponseInfo); 119 | finally 120 | fProcessing := false; 121 | end; 122 | end; 123 | 124 | procedure THTTPServer.Connect(AContext: TIdContext); 125 | begin 126 | TRoutes.getInstance; 127 | end; 128 | 129 | constructor THTTPServer.Create(AOwner: TComponent); 130 | begin 131 | if Assigned(instance) then 132 | raise Exception.Create('Classe deve ser instancia via getInstance'); 133 | 134 | inherited; 135 | 136 | instance := self; 137 | 138 | self.OnConnect := Connect; 139 | self.OnCommandGet := CommandGet; 140 | self.OnCommandOther := CommandOther; 141 | 142 | fPathResource := DEFAULT_PATH_RESOURCES; 143 | end; 144 | 145 | destructor THTTPServer.Destroy; 146 | begin 147 | instance := nil; 148 | inherited; 149 | end; 150 | 151 | class function THTTPServer.getInstance: THTTPServer; 152 | begin 153 | if Not(Assigned(instance)) then 154 | THTTPServer.Create(nil); 155 | 156 | result := instance; 157 | end; 158 | 159 | function THTTPServer.getLocalServer: String; 160 | begin 161 | result := 'http://127.0.0.1:' + DefaultPort.ToString; 162 | end; 163 | 164 | function THTTPServer.getResFile(sFile: String): String; 165 | var 166 | tempFile : String; 167 | begin 168 | sFile := ExtractFileName(sFile.Replace('/','\')); 169 | 170 | tempFile := sFile.Replace('.', '_') 171 | .Replace('-', '_') 172 | .Replace('/', EmptyStr) 173 | .Replace('\', EmptyStr); 174 | 175 | result := tempFile; 176 | end; 177 | 178 | function THTTPServer.isResource(ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo) : Boolean; 179 | var 180 | path : String; 181 | sExt : String; 182 | isRes : Boolean; 183 | resFile: String; 184 | begin 185 | path := ARequestInfo.URI; 186 | if (path = '\') or (path = '/') then 187 | path := FILE_INDEX; 188 | 189 | sExt := ExtractFileExt(path); 190 | if (sExt.IsEmpty) then 191 | exit(false); 192 | 193 | {$IF DEFINED(ANDROID) OR (DEFINED(IOS))} 194 | path := TPath.GetDocumentsPath + PathDelim + PathResource + path; 195 | {$ELSE} 196 | path := System.SysUtils.GetCurrentDir + '/' + PathResource + path; 197 | {$ENDIF} 198 | 199 | isRes := UpperCase(ExtractFileExt(PathResource)) = '.RES'; 200 | if (not(isRes) and Not(FileExists(path))) then 201 | exit; 202 | 203 | try 204 | AResponseInfo.ContentType := getContentType(sExt); 205 | if (isRes) then 206 | begin 207 | resFile := getResFile(path); 208 | AResponseInfo.ContentStream := TResourceStream.Create(HInstance, resFile, RT_RCDATA); 209 | end 210 | else 211 | begin 212 | AResponseInfo.ContentStream := TFileStream.Create(path, fmOpenRead); 213 | end; 214 | 215 | result := true; 216 | except 217 | result := false; 218 | end; 219 | end; 220 | 221 | procedure THTTPServer.validEstablishConnection(AContext: TIdContext; 222 | ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); 223 | begin 224 | if Assigned(onEstablishConnection) and not(onEstablishConnection(AContext, ARequestInfo, AResponseInfo))then 225 | raise Exception.Create('Connection denied'); 226 | end; 227 | 228 | function THTTPServer.getContentType(sExt : String) : String; 229 | begin 230 | //; charset=UTF-8 231 | sExt := StringReplace(sExt, '.', '', [rfReplaceAll]); 232 | 233 | if (ansicomparestr(sExt,'htm') = 0) or (ansicomparestr(sExt,'html') = 0) then 234 | exit('text/html; charset=UTF-8'); 235 | 236 | if (ansicomparestr(sExt,'js') = 0) then 237 | exit('text/javascript; charset=UTF-8'); 238 | 239 | if (ansicomparestr(sExt,'css') = 0) then 240 | exit('text/css; charset=UTF-8'); 241 | 242 | if (ansicomparestr(sExt,'woff') = 0) then 243 | exit('application/x-font-woff'); 244 | 245 | if (ansicomparestr(sExt,'ttf') = 0) then 246 | exit('application/octet-stream'); 247 | 248 | if (ansicomparestr(sExt,'jpeg') = 0) or (ansicomparestr(sExt,'jpg') = 0)then 249 | exit('image/jpeg'); 250 | 251 | result := 'application/' + sExt; 252 | end; 253 | 254 | end. 255 | -------------------------------------------------------------------------------- /src/routes.pas: -------------------------------------------------------------------------------- 1 | unit routes; 2 | 3 | interface 4 | 5 | uses 6 | IdCustomHTTPServer, System.Rtti, class_.util, parameter, System.Classes, 7 | System.JSON, System.SysUtils, System.Types; 8 | 9 | type 10 | TRouteType = (rtNone,rtGET, rtPOST, rtPUT, rtDELETE); 11 | 12 | TListTMetodoHTTP = TArray; 13 | 14 | TRouteTypeHelper = record helper for TRouteType 15 | public 16 | function StrToTRouteType(route_type : String) : TRouteType; 17 | function toString : String; 18 | end; 19 | 20 | TRoute = class 21 | private 22 | froute_type : TRouteType; 23 | fendpoint : String; 24 | fmethod : String; 25 | fparameters : TListParameter; 26 | fmethod_name : String ; 27 | fclass_name : String ; 28 | 29 | procedure setMethod(const Value: String); 30 | procedure FreeListparameters; 31 | public 32 | destructor Destroy; override; 33 | 34 | property route_type : TRouteType read froute_type write froute_type ; 35 | property endpoint : String read fendpoint write fendpoint ; 36 | property method : String read fmethod write setMethod ; 37 | property parameters : TListParameter read fparameters ; 38 | property method_name: String read fmethod_name ; 39 | property class_name : String read fclass_name ; 40 | end; 41 | 42 | TListRoutes = array of TRoute; 43 | 44 | TRoutes = class 45 | private 46 | froutes_get : TListRoutes; 47 | froutes_post : TListRoutes; 48 | froutes_put : TListRoutes; 49 | froutes_delete : TListRoutes; 50 | 51 | class var instance : TRoutes; 52 | 53 | function addRoute(var list : TListRoutes; route : TRoute) : Integer; 54 | function getListRoutes(route_type : TRouteType) : TListRoutes; 55 | 56 | procedure loadFileConfig(); 57 | procedure loadEndPoits(json : TJSONObject; MetodoHTTP : TRouteType); 58 | procedure FreeListRoute(froutes: TListRoutes); 59 | protected 60 | constructor create; 61 | 62 | function FindRoute(ARequestInfo: TIdHTTPRequestInfo) : TRoute; Overload; 63 | function FindRoute(list : TListRoutes; uri : String) : TRoute; Overload; 64 | 65 | function callMethod(ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo; route : TRoute): variant; 66 | function error404(ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo): variant; 67 | public 68 | class function getInstance : TRoutes; 69 | class procedure releaseInstance; 70 | 71 | function endpoint(ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo) : variant; 72 | 73 | Destructor Destroy; override; 74 | end; 75 | 76 | var 77 | ListTMetodoHTTP : TListTMetodoHTTP; 78 | 79 | procedure setListTMetodoHTTP; 80 | implementation 81 | 82 | uses 83 | controller, HTTPServer.response.page; 84 | 85 | procedure setListTMetodoHTTP; 86 | begin 87 | SetLength(ListTMetodoHTTP,4); 88 | 89 | ListTMetodoHTTP[0] := rtGET; 90 | ListTMetodoHTTP[1] := rtPOST; 91 | ListTMetodoHTTP[2] := rtPUT; 92 | ListTMetodoHTTP[3] := rtDELETE; 93 | end; 94 | 95 | { TRoutes } 96 | function TRoutes.addRoute(var list: TListRoutes; route: TRoute): Integer; 97 | var 98 | nPos : Integer; 99 | begin 100 | nPos := Length(list)+1; 101 | 102 | SetLength(list,nPos); 103 | list[nPos-1] := route; 104 | 105 | result := nPos; 106 | end; 107 | 108 | function TRoutes.callMethod(ARequestInfo: TIdHTTPRequestInfo; 109 | AResponseInfo: TIdHTTPResponseInfo; route : TRoute): variant; 110 | var 111 | controller : TObject; 112 | begin 113 | controller := TClassUtil.instantiateClassViaRTTI(route.class_name); 114 | 115 | if Not(controller.InheritsFrom(TController)) then 116 | raise Exception.Create('Class must be of the type TController'); 117 | 118 | try 119 | TController(controller).setRequestInfo(ARequestInfo); 120 | TController(controller).setResponseInfo(AResponseInfo); 121 | 122 | result := TController(controller).execMethod(route.method_name, route.parameters.getArray(true)); 123 | finally 124 | FreeAndNil(controller); 125 | end; 126 | end; 127 | 128 | constructor TRoutes.create; 129 | begin 130 | 131 | if Assigned(TRoutes.instance) then 132 | raise Exception.Create('This class can be called by the method getInstace'); 133 | 134 | TRoutes.instance := self; 135 | loadFileConfig; 136 | end; 137 | 138 | procedure TRoutes.FreeListRoute(froutes : TListRoutes); 139 | var 140 | i : integer; 141 | begin 142 | for i := Length(froutes)-1 downto 0 do 143 | froutes[i].Free; 144 | 145 | SetLength(froutes, 0); 146 | end; 147 | 148 | destructor TRoutes.Destroy; 149 | begin 150 | FreeLIstRoute(froutes_get); 151 | FreeLIstRoute(froutes_post); 152 | FreeLIstRoute(froutes_put); 153 | FreeLIstRoute(froutes_delete); 154 | inherited; 155 | end; 156 | 157 | function TRoutes.endpoint(ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo): variant; 158 | var 159 | route : TRoute; 160 | begin 161 | route := FindRoute(ARequestInfo); 162 | if Assigned(route) then 163 | result := callMethod(ARequestInfo, AResponseInfo, route) 164 | else 165 | result := error404(ARequestInfo, AResponseInfo); 166 | end; 167 | 168 | function TRoutes.error404(ARequestInfo: TIdHTTPRequestInfo; 169 | AResponseInfo: TIdHTTPResponseInfo): variant; 170 | begin 171 | result := HTTPServerResponsePage.return_404(AResponseInfo); 172 | end; 173 | 174 | function TRoutes.FindRoute(ARequestInfo: TIdHTTPRequestInfo): TRoute; 175 | begin 176 | result := FindRoute(getListRoutes(rtNone.StrToTRouteType(ARequestInfo.Command)),ARequestInfo.URI); 177 | end; 178 | 179 | function TRoutes.FindRoute(list: TListRoutes; uri : String): TRoute; 180 | var 181 | i, j : Integer; 182 | nPassed : Integer; 183 | blocks_route : TStringList; 184 | blocks_uri : TStringList; 185 | begin 186 | result:= nil; 187 | 188 | blocks_route := TStringList.Create; 189 | blocks_uri := TStringList.Create; 190 | try 191 | blocks_uri.Text := uri.Replace('/',sLineBreak).Trim; 192 | for i := 0 to length(list)-1 do 193 | begin 194 | blocks_route.Text := list[i].endpoint.Replace('/',sLineBreak).Trim; 195 | 196 | if (blocks_route.Count <> blocks_uri.Count) then 197 | continue; 198 | 199 | nPassed := 0; 200 | for j := 0 to blocks_route.Count-1 do 201 | begin 202 | if (pos(PREFIX_PARAMETER, blocks_route[j]) = 0) and (UpperCase(blocks_route[j]) <> UpperCase(blocks_uri[j])) then 203 | break; 204 | 205 | inc(nPassed); 206 | end; 207 | 208 | if (nPassed <> blocks_uri.Count) then 209 | Continue; 210 | 211 | list[i].parameters.setParameters(uri,list[i].endpoint); 212 | result := list[i]; 213 | Break; 214 | end; 215 | 216 | finally 217 | FreeAndNil(blocks_route); 218 | FreeAndNil(blocks_uri); 219 | end; 220 | end; 221 | 222 | class function TRoutes.getInstance: TRoutes; 223 | begin 224 | if Not(Assigned(TRoutes.instance)) then 225 | TRoutes.create; 226 | 227 | result := TRoutes.instance; 228 | end; 229 | 230 | function TRoutes.getListRoutes(route_type: TRouteType): TListRoutes; 231 | begin 232 | case route_type of 233 | rtGET : result := froutes_get ; 234 | rtPOST : result := froutes_post ; 235 | rtPUT : result := froutes_put ; 236 | rtDELETE: result := froutes_delete; 237 | end; 238 | end; 239 | 240 | procedure TRoutes.loadEndPoits(json : TJSONObject; MetodoHTTP : TRouteType); 241 | var 242 | list_ep : TJSONObject; 243 | i : Integer ; 244 | pair : TJSONPair ; 245 | route : TRoute ; 246 | metodo : String ; 247 | begin 248 | 249 | metodo := MetodoHTTP.toString; 250 | try 251 | list_ep := TJSONObject(json.GetValue(metodo)); 252 | except 253 | on e: exception do 254 | begin 255 | releaseInstance; 256 | raise Exception.Create('Error while load object ' + metodo); 257 | end; 258 | end; 259 | 260 | for i := 0 to list_ep.Count-1 do 261 | begin 262 | pair := TJSONPair(list_ep.Pairs[i]); 263 | route := TRoute.Create; 264 | route.route_type := MetodoHTTP; 265 | route.endpoint := pair.JsonString.ToString.Replace('\/','/').Replace('"',''); 266 | route.method := pair.JsonValue.ToString.Replace('"',''); 267 | 268 | case MetodoHTTP of 269 | rtGET : addRoute(froutes_get ,route); 270 | rtPOST : addRoute(froutes_post ,route); 271 | rtPUT : addRoute(froutes_put ,route); 272 | rtDELETE : addRoute(froutes_delete,route); 273 | end; 274 | end; 275 | end; 276 | 277 | procedure TRoutes.loadFileConfig; 278 | var 279 | list : TStringList; 280 | json : TJSONObject; 281 | i : integer; 282 | begin 283 | list := TStringList.Create; 284 | try 285 | list.LoadFromStream(TResourceStream.Create(HInstance,'routes',RT_RCDATA)); 286 | 287 | json := TJSONObject(TJSONObject.ParseJSONValue('{'+list.Text+'}')); 288 | 289 | for i:=0 to Length(ListTMetodoHTTP)-1 do 290 | loadEndPoits(json,ListTMetodoHTTP[i]); 291 | 292 | finally 293 | FreeAndNil(list); 294 | end; 295 | end; 296 | 297 | class procedure TRoutes.releaseInstance; 298 | begin 299 | if Assigned(TRoutes.instance) then 300 | FreeAndNil(TRoutes.instance); 301 | end; 302 | 303 | { TRouteTypeHelper } 304 | 305 | function TRouteTypeHelper.StrToTRouteType(route_type : String): TRouteType; 306 | begin 307 | if (UpperCase(route_type) = 'GET') then 308 | result := rtGET 309 | else if (UpperCase(route_type) = 'POST')then 310 | result := rtPOST 311 | else if (UpperCase(route_type) = 'PUT')then 312 | result := rtPUT 313 | else if (UpperCase(route_type) = 'DELETE')then 314 | result := rtDELETE 315 | else 316 | result := rtNone 317 | end; 318 | 319 | function TRouteTypeHelper.toString: String; 320 | begin 321 | if (self = rtGET) then 322 | result := 'GET' 323 | else if (self = rtPOST) then 324 | result := 'POST' 325 | else if (self = rtPUT) then 326 | result := 'PUT' 327 | else if (self = rtDELETE) then 328 | result := 'DELETE' 329 | else 330 | result := 'NA' 331 | end; 332 | 333 | { TRoute } 334 | destructor TRoute.Destroy; 335 | begin 336 | FreeListparameters; 337 | inherited; 338 | end; 339 | 340 | procedure TRoute.FreeListparameters(); 341 | var 342 | i : integer; 343 | begin 344 | for i := Length(fParameters)-1 downto 0 do 345 | fParameters[i].Free; 346 | end; 347 | 348 | procedure TRoute.setMethod(const Value: String); 349 | var 350 | strList : TStringList; 351 | params : TStringList; 352 | i : integer; 353 | pos_ini : integer; 354 | nPos : integer; 355 | begin 356 | fmethod := Value; 357 | 358 | strList := TStringList.Create; 359 | params := TStringList.Create; 360 | try 361 | pos_ini := Pos('(',fmethod); 362 | nPos := Pos(')',fmethod) - pos_ini; 363 | params.Text := Copy(fmethod,pos_ini+1,nPos-1).Replace(',',sLineBreak).Trim; 364 | 365 | strList.Text := fmethod.Replace('.',sLineBreak).Trim; 366 | 367 | fmethod_name := strList[strList.Count-1]; 368 | if (pos_ini > 0) then 369 | fmethod_name := copy(fmethod_name,0,Pos('(',fmethod_name)-1); 370 | 371 | for i := 0 to params.Count-1 do 372 | parameters.addParameter(params[i]); 373 | 374 | fclass_name := strList[0]; 375 | for i := 1 to strList.Count-2 do 376 | fclass_name := fclass_name + '.' + strList[i]; 377 | 378 | finally 379 | FreeAndNil(strList); 380 | FreeAndNil(params); 381 | end; 382 | end; 383 | 384 | 385 | initialization 386 | setListTMetodoHTTP; 387 | finalization 388 | TRoutes.releaseInstance; 389 | 390 | end. 391 | -------------------------------------------------------------------------------- /samples/SimpleStaticHTML/SimpleStaticHTML_EAS.dproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | {4CA3C810-2AC8-4E74-99C9-CA921CB7437A} 4 | 18.5 5 | VCL 6 | SimpleStaticHTML_EAS.dpr 7 | True 8 | Debug 9 | Win32 10 | 1 11 | Application 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 | Cfg_1 29 | true 30 | true 31 | 32 | 33 | true 34 | Base 35 | true 36 | 37 | 38 | true 39 | Cfg_2 40 | true 41 | true 42 | 43 | 44 | System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) 45 | $(BDS)\bin\delphi_PROJECTICON.ico 46 | SimpleStaticHTML_EAS 47 | .\$(Platform)\$(Config) 48 | .\$(Platform)\$(Config) 49 | false 50 | false 51 | false 52 | false 53 | false 54 | 55 | 56 | $(BDS)\bin\default_app.manifest 57 | DBXSqliteDriver;DBXDb2Driver;OCX_Servers;dxCoreRS23;vclactnband;frxe23;vclFireDAC;dxPSLnksRS23;dxPSdxLCLnkRS23;tethering;cxDataRS23;dxPSdxOCLnkRS23;dxTabbedMDIRS23;FireDACADSDriver;dxSkinBlackRS23;dxSkinLondonLiquidSkyRS23;JvPluginSystem;pckUserControl_DT;dxDBXServerModeRS23;dxHttpIndyRequestRS23;dxPScxGridLnkRS23;cxSchedulerRS23;FireDACMSSQLDriver;vcltouch;ACBr_NFe;ACBr_NFeDanfeFR;vcldb;Intraweb;svn;dxWizardControlRS23;dxPScxCommonRS23;dxSkinMcSkinRS23;JvBands;ACBr_NFeDanfeESCPOS;dxSkinOffice2007BlueRS23;JvJans;Rave110VCL;dxBarRS23;pckUserControl_RT;cxSchedulerRibbonStyleEventEditorRS23;dxSkinOffice2013WhiteRS23;JvDotNetCtrls;uniGUI23Chart;dxPSTeeChartRS23;cxLibraryRS23;dxSkinVisualStudio2013LightRS23;vclib;cxPivotGridChartRS23;dxSkinSummer2008RS23;dxPSdxDBOCLnkRS23;dxGDIPlusRS23;dxSkinDarkSideRS23;FireDACDBXDriver;dxSkinFoggyRS23;dxSkinSevenRS23;ACBr_NFSeDanfseFR;vclx;dxSkinOffice2010SilverRS23;dxdborRS23;RESTBackendComponents;dxLayoutControlRS23;dxPSPrVwRibbonRS23;VCLRESTComponents;dxSkinDevExpressStyleRS23;uniGUI23m;TAcquireImage;dxSkinWhiteprintRS23;vclie;bindengine;CloudService;JvHMI;FireDACMySQLDriver;pckUCDataConnector;dxSkinOffice2013DarkGrayRS23;DataSnapClient;dxPScxPCProdRS23;bindcompdbx;uniGUI23VCL;ACBr_TCP;DBXSybaseASEDriver;IndyIPServer;ACBr_CTe;dxSkinPumpkinRS23;IndySystem;dsnapcon;JustifyRichEdit;ACBr_synapse;cxTreeListdxBarPopupMenuRS23;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;ACBr_SPEDImportar;dxSkinLilianRS23;Jcl;ACBr_SPED;ACBr_MDFe;dxBarDBNavRS23;dxFlowChartRS23;dxSkinOffice2016ColorfulRS23;DBXOdbcDriver;FireDACTDataDriver;FMXTee;fs23;soaprtl;DbxCommonDriver;dxSpreadSheetRS23;JvManagedThreads;Png;dxSkinOffice2007PinkRS23;dxPSdxSpreadSheetLnkRS23;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;dxSkinHighContrastRS23;dxSkinSevenClassicRS23;rtl;dxSkinTheAsphaltWorldRS23;DbxClientDriver;dxSkinDevExpressDarkStyleRS23;DBXSybaseASADriver;dxNavBarRS23;dxSkinMetropolisDarkRS23;JvTimeFramework;JvSystem;SampleListViewMultiDetailAppearancePackage;dxRichEditControlRS23;JvStdCtrls;appanalytics;cxPivotGridRS23;dxSkinsdxDLPainterRS23;IndyIPClient;dxRibbonRS23;dxPScxVGridLnkRS23;bindcompvcl;frxDB23;dxSkinOffice2007SilverRS23;dxPScxTLLnkRS23;dxMapControlRS23;TeeUI;JvDocking;JvPascalInterpreter;VclSmp;dxPScxSchedulerLnkRS23;cxTreeListRS23;FireDACODBCDriver;JclVcl;DataSnapIndy10ServerTransport;dxRibbonCustomizationFormRS23;dxPSRichEditControlLnkRS23;ACBr_Boleto;dxBarExtDBItemsRS23;DataSnapProviderClient;FireDACMongoDBDriver;dxSkiniMaginaryRS23;frx23;dxSpellCheckerRS23;JvControls;dxSkinsdxBarPainterRS23;ACBr_NFSe;JvPrintPreview;dxSkinCoffeeRS23;DataSnapServerMidas;RESTComponents;DBXInterBaseDriver;dxADOServerModeRS23;emsclientfiredac;DataSnapFireDAC;svnui;dxmdsRS23;dxPSDBTeeChartRS23;dxdbtrRS23;dxSkinLiquidSkyRS23;dxSkinSpringTimeRS23;JvGlobus;dxPSCoreRS23;dxSkinscxPCPainterRS23;DBXMSSQLDriver;JvMM;dxSkinXmas2008BlueRS23;DatasnapConnectorsFreePascal;bindcompfmx;JvNet;DBXOracleDriver;dxSkinSilverRS23;dxSkinValentineRS23;inetdb;JvAppFrm;ACBr_Diversos;ACBr_TXTComum;FmxTeeUI;dxBarExtItemsRS23;FireDACIBDriver;fmx;fmxdae;dxServerModeRS23;ACBr_CTeDacteFR;dxPsPrVwAdvRS23;dxSkinOffice2010BlackRS23;JvWizards;cxPageControlRS23;dxSkinStardustRS23;cxSchedulerGridRS23;dbexpress;IndyCore;dxSkinSharpPlusRS23;JvPageComps;dsnap;DataSnapCommon;emsclient;FireDACCommon;dxSkinOffice2010BlueRS23;JvDB;dxSkinVS2010RS23;dxSkinMetropolisRS23;DataSnapConnectors;cxVerticalGridRS23;soapserver;dxSkinCaramelRS23;frxTee23;dxTileControlRS23;JclDeveloperTools;cxGridRS23;SampleListViewRatingsAppearancePackage;FireDACOracleDriver;DBXMySQLDriver;JvCmp;pckUCMidasConn;DBXFirebirdDriver;ACBr_Sintegra;FireDACCommonDriver;RDPrint;inet;IndyIPCommon;JvCustom;dxSkinDarkRoomRS23;dxDockingRS23;vcl;dxSkinOffice2007GreenRS23;dxPScxExtCommonRS23;JvXPCtrls;dxSkinsCoreRS23;FireDACDb2Driver;dxThemeRS23;dxSkinsdxRibbonPainterRS23;dxSkinVisualStudio2013BlueRS23;RtmRxCtl230;mxExport_Seattle;pckUCIBXConn;dxSkinMoneyTwinsRS23;pckHistorico;dxPSdxFCLnkRS23;dxtrmdRS23;TeeDB;FireDAC;cxSchedulerTreeBrowserRS23;JvCore;ACBr_Comum;dxFireDACServerModeRS23;dxSkinBlueRS23;JvCrypt;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;cxEditorsRS23;dxSkinGlassOceansRS23;JvDlgs;JvRuntimeDesign;dxSkinsdxNavBarPainterRS23;dxGaugeControlRS23;ibxpress;Tee;cxPivotGridOLAPRS23;DataSnapServer;dxSkinSharpRS23;mxNativeExcel_Seattle;ibxbindings;RtmRxDB230;vclwinx;FireDACDSDriver;ACBr_OpenSSL;dxSkinBlueprintRS23;pckMD5;ACBr_DFeComum;CustomIPTransport;vcldsnap;dxSkinOffice2007BlackRS23;dxSkinOffice2013LightGrayRS23;bindcomp;fgx;ACBr_Serial;DBXInformixDriver;dxPSdxGaugeControlLnkRS23;dxPScxPivotGridLnkRS23;dxorgcRS23;dxPSdxDBTVLnkRS23;vclribbon;dbxcds;FreeBoleto_D11;ACBr_NFCeECFVirtual;adortl;ACBr_BoletoFR;dxComnRS23;dsnapxml;dbrtl;inetdbxpress;IndyProtocols;cxExportRS23;dxSkinOffice2016DarkRS23;JclContainers;dxSkinVisualStudio2013DarkRS23;dxSkinscxSchedulerPainterRS23;fmxase;$(DCC_UsePackage) 58 | 1033 59 | CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName) 60 | true 61 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 62 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png 63 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png 64 | 65 | 66 | DEBUG;$(DCC_Define) 67 | true 68 | false 69 | true 70 | true 71 | true 72 | 73 | 74 | ..\..\lib;..\..\src;$(DCC_UnitSearchPath) 75 | 1033 76 | true 77 | true 78 | false 79 | Debug 80 | PerMonitor 81 | D:\Projetos\WebView\ 82 | 83 | 84 | false 85 | RELEASE;$(DCC_Define) 86 | 0 87 | 0 88 | 89 | 90 | true 91 | PerMonitor 92 | 93 | 94 | 95 | MainSource 96 | 97 | 98 |
Form1
99 | dfm 100 |
101 | 102 | 103 | ResourceItem 104 | RCDATA 105 | routes 106 | 107 | 108 | Cfg_2 109 | Base 110 | 111 | 112 | Base 113 | 114 | 115 | Cfg_1 116 | Base 117 | 118 |
119 | 120 | Delphi.Personality.12 121 | Application 122 | 123 | 124 | 125 | DBExpress Enterprise Data Explorer Integration 126 | Microsoft Office 2000 Sample Automation Server Wrapper Components 127 | Microsoft Office XP Sample Automation Server Wrapper Components 128 | ACBr - DANFe em FastReport - (http://www.projetoacbr.com.br/) 129 | ACBr - DACTe em FastReport - (http://www.projetoacbr.com.br/) 130 | ACBr - DANFSe em FastReport - (http://www.projetoacbr.com.br/) 131 | ACBr - Boleto Impressão em FastReport - (http://www.projetoacbr.com.br/) 132 | ACBr - DAMDFe em FastReport - (http://www.projetoacbr.com.br/) 133 | ACBr - GNRE Impressão da Guia em FastReport - (http://www.projetoacbr.com.br/) 134 | 135 | 136 | SimpleStaticHTML_EAS.dpr 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 1 145 | 146 | 147 | 1 148 | 149 | 150 | 151 | 152 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 153 | 1 154 | 155 | 156 | 157 | 158 | classes 159 | 1 160 | 161 | 162 | 163 | 164 | Contents\MacOS 165 | 0 166 | 167 | 168 | 1 169 | 170 | 171 | Contents\MacOS 172 | 1 173 | 174 | 175 | 176 | 177 | res\drawable-xxhdpi 178 | 1 179 | 180 | 181 | 182 | 183 | library\lib\mips 184 | 1 185 | 186 | 187 | 188 | 189 | 1 190 | 191 | 192 | 1 193 | 194 | 195 | 1 196 | 197 | 198 | 199 | 200 | Contents\Resources 201 | 1 202 | 203 | 204 | 205 | 206 | 0 207 | 208 | 209 | 1 210 | 211 | 212 | Contents\MacOS 213 | 1 214 | 215 | 216 | 1 217 | 218 | 219 | library\lib\armeabi-v7a 220 | 1 221 | 222 | 223 | 1 224 | 225 | 226 | 227 | 228 | 0 229 | 230 | 231 | Contents\MacOS 232 | 1 233 | .framework 234 | 235 | 236 | 237 | 238 | 1 239 | 240 | 241 | 1 242 | 243 | 244 | 245 | 246 | 1 247 | 248 | 249 | 1 250 | 251 | 252 | 1 253 | 254 | 255 | 256 | 257 | 1 258 | 259 | 260 | 1 261 | 262 | 263 | 1 264 | 265 | 266 | 267 | 268 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 269 | 1 270 | 271 | 272 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 273 | 1 274 | 275 | 276 | 277 | 278 | library\lib\x86 279 | 1 280 | 281 | 282 | 283 | 284 | res\xml 285 | 1 286 | 287 | 288 | 289 | 290 | res\values-v21 291 | 1 292 | 293 | 294 | 295 | 296 | library\lib\armeabi 297 | 1 298 | 299 | 300 | 301 | 302 | 1 303 | 304 | 305 | 1 306 | 307 | 308 | 1 309 | 310 | 311 | 312 | 313 | 1 314 | 315 | 316 | 1 317 | 318 | 319 | 1 320 | 321 | 322 | 323 | 324 | 0 325 | 326 | 327 | 1 328 | 329 | 330 | Contents\MacOS 331 | 1 332 | 333 | 334 | 335 | 336 | 1 337 | 338 | 339 | 1 340 | 341 | 342 | 1 343 | 344 | 345 | 346 | 347 | res\drawable-normal 348 | 1 349 | 350 | 351 | 352 | 353 | res\drawable-large 354 | 1 355 | 356 | 357 | 358 | 359 | res\drawable-xhdpi 360 | 1 361 | 362 | 363 | 364 | 365 | 1 366 | 367 | 368 | 1 369 | 370 | 371 | 1 372 | 373 | 374 | 375 | 376 | Assets 377 | 1 378 | 379 | 380 | Assets 381 | 1 382 | 383 | 384 | 385 | 386 | ../ 387 | 1 388 | 389 | 390 | ../ 391 | 1 392 | 393 | 394 | 395 | 396 | library\lib\armeabi-v7a 397 | 1 398 | 399 | 400 | 401 | 402 | res\drawable-hdpi 403 | 1 404 | 405 | 406 | 407 | 408 | Contents 409 | 1 410 | 411 | 412 | 413 | 414 | ../ 415 | 1 416 | 417 | 418 | 419 | 420 | Assets 421 | 1 422 | 423 | 424 | Assets 425 | 1 426 | 427 | 428 | 429 | 430 | res\values 431 | 1 432 | 433 | 434 | 435 | 436 | 1 437 | 438 | 439 | 1 440 | 441 | 442 | 1 443 | 444 | 445 | 446 | 447 | res\drawable-small 448 | 1 449 | 450 | 451 | 452 | 453 | res\drawable 454 | 1 455 | 456 | 457 | 458 | 459 | 1 460 | 461 | 462 | 1 463 | 464 | 465 | 1 466 | 467 | 468 | 469 | 470 | 1 471 | 472 | 473 | 474 | 475 | res\drawable 476 | 1 477 | 478 | 479 | 480 | 481 | 0 482 | 483 | 484 | 0 485 | 486 | 487 | Contents\Resources\StartUp\ 488 | 0 489 | 490 | 491 | 0 492 | 493 | 494 | 0 495 | 496 | 497 | 0 498 | 499 | 500 | 501 | 502 | library\lib\armeabi-v7a 503 | 1 504 | 505 | 506 | 507 | 508 | res\drawable-mdpi 509 | 1 510 | 511 | 512 | 513 | 514 | 0 515 | .bpl 516 | 517 | 518 | 1 519 | .dylib 520 | 521 | 522 | Contents\MacOS 523 | 1 524 | .dylib 525 | 526 | 527 | 1 528 | .dylib 529 | 530 | 531 | 1 532 | .dylib 533 | 534 | 535 | 536 | 537 | res\drawable-xlarge 538 | 1 539 | 540 | 541 | 542 | 543 | res\drawable-ldpi 544 | 1 545 | 546 | 547 | 548 | 549 | 0 550 | .dll;.bpl 551 | 552 | 553 | 1 554 | .dylib 555 | 556 | 557 | Contents\MacOS 558 | 1 559 | .dylib 560 | 561 | 562 | 1 563 | .dylib 564 | 565 | 566 | 1 567 | .dylib 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | True 582 | 583 | 584 | 12 585 | 586 | 587 | 588 | 589 |
590 | -------------------------------------------------------------------------------- /samples/hello/server_EAS.dproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | {4CA3C810-2AC8-4E74-99C9-CA921CB7437A} 4 | 18.0 5 | VCL 6 | server_EAS.dpr 7 | True 8 | Debug 9 | Win32 10 | 1 11 | Application 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 | Cfg_1 34 | true 35 | true 36 | 37 | 38 | true 39 | Base 40 | true 41 | 42 | 43 | true 44 | Cfg_2 45 | true 46 | true 47 | 48 | 49 | System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) 50 | $(BDS)\bin\delphi_PROJECTICON.ico 51 | server_EAS 52 | .\$(Platform)\$(Config) 53 | .\$(Platform)\$(Config) 54 | false 55 | false 56 | false 57 | false 58 | false 59 | 60 | 61 | $(BDS)\bin\default_app.manifest 62 | DBXSqliteDriver;DBXDb2Driver;OCX_Servers;dxCoreRS23;vclactnband;frxe23;vclFireDAC;dxPSLnksRS23;dxPSdxLCLnkRS23;tethering;cxDataRS23;dxPSdxOCLnkRS23;dxTabbedMDIRS23;FireDACADSDriver;dxSkinBlackRS23;dxSkinLondonLiquidSkyRS23;JvPluginSystem;pckUserControl_DT;dxDBXServerModeRS23;dxHttpIndyRequestRS23;dxPScxGridLnkRS23;cxSchedulerRS23;FireDACMSSQLDriver;vcltouch;ACBr_NFe;ACBr_NFeDanfeFR;vcldb;Intraweb;svn;dxWizardControlRS23;dxPScxCommonRS23;dxSkinMcSkinRS23;JvBands;ACBr_NFeDanfeESCPOS;dxSkinOffice2007BlueRS23;JvJans;Rave110VCL;dxBarRS23;pckUserControl_RT;cxSchedulerRibbonStyleEventEditorRS23;dxSkinOffice2013WhiteRS23;JvDotNetCtrls;uniGUI23Chart;dxPSTeeChartRS23;cxLibraryRS23;dxSkinVisualStudio2013LightRS23;vclib;cxPivotGridChartRS23;dxSkinSummer2008RS23;dxPSdxDBOCLnkRS23;dxGDIPlusRS23;dxSkinDarkSideRS23;FireDACDBXDriver;dxSkinFoggyRS23;dxSkinSevenRS23;ACBr_NFSeDanfseFR;vclx;dxSkinOffice2010SilverRS23;dxdborRS23;RESTBackendComponents;dxLayoutControlRS23;dxPSPrVwRibbonRS23;VCLRESTComponents;dxSkinDevExpressStyleRS23;uniGUI23m;TAcquireImage;dxSkinWhiteprintRS23;vclie;bindengine;CloudService;JvHMI;FireDACMySQLDriver;pckUCDataConnector;dxSkinOffice2013DarkGrayRS23;DataSnapClient;dxPScxPCProdRS23;bindcompdbx;uniGUI23VCL;ACBr_TCP;DBXSybaseASEDriver;IndyIPServer;ACBr_CTe;dxSkinPumpkinRS23;IndySystem;dsnapcon;JustifyRichEdit;ACBr_synapse;cxTreeListdxBarPopupMenuRS23;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;ACBr_SPEDImportar;dxSkinLilianRS23;Jcl;ACBr_SPED;ACBr_MDFe;dxBarDBNavRS23;dxFlowChartRS23;dxSkinOffice2016ColorfulRS23;DBXOdbcDriver;FireDACTDataDriver;FMXTee;fs23;soaprtl;DbxCommonDriver;dxSpreadSheetRS23;JvManagedThreads;Png;dxSkinOffice2007PinkRS23;dxPSdxSpreadSheetLnkRS23;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;dxSkinHighContrastRS23;dxSkinSevenClassicRS23;rtl;dxSkinTheAsphaltWorldRS23;DbxClientDriver;dxSkinDevExpressDarkStyleRS23;DBXSybaseASADriver;dxNavBarRS23;dxSkinMetropolisDarkRS23;JvTimeFramework;JvSystem;SampleListViewMultiDetailAppearancePackage;dxRichEditControlRS23;JvStdCtrls;appanalytics;cxPivotGridRS23;dxSkinsdxDLPainterRS23;IndyIPClient;dxRibbonRS23;dxPScxVGridLnkRS23;bindcompvcl;frxDB23;dxSkinOffice2007SilverRS23;dxPScxTLLnkRS23;dxMapControlRS23;TeeUI;JvDocking;JvPascalInterpreter;VclSmp;dxPScxSchedulerLnkRS23;cxTreeListRS23;FireDACODBCDriver;JclVcl;DataSnapIndy10ServerTransport;dxRibbonCustomizationFormRS23;dxPSRichEditControlLnkRS23;ACBr_Boleto;dxBarExtDBItemsRS23;DataSnapProviderClient;FireDACMongoDBDriver;dxSkiniMaginaryRS23;frx23;dxSpellCheckerRS23;JvControls;dxSkinsdxBarPainterRS23;ACBr_NFSe;JvPrintPreview;dxSkinCoffeeRS23;DataSnapServerMidas;RESTComponents;DBXInterBaseDriver;dxADOServerModeRS23;emsclientfiredac;DataSnapFireDAC;svnui;dxmdsRS23;dxPSDBTeeChartRS23;dxdbtrRS23;dxSkinLiquidSkyRS23;dxSkinSpringTimeRS23;JvGlobus;dxPSCoreRS23;dxSkinscxPCPainterRS23;DBXMSSQLDriver;JvMM;dxSkinXmas2008BlueRS23;DatasnapConnectorsFreePascal;bindcompfmx;JvNet;DBXOracleDriver;dxSkinSilverRS23;dxSkinValentineRS23;inetdb;JvAppFrm;ACBr_Diversos;ACBr_TXTComum;FmxTeeUI;dxBarExtItemsRS23;FireDACIBDriver;fmx;fmxdae;dxServerModeRS23;ACBr_CTeDacteFR;dxPsPrVwAdvRS23;dxSkinOffice2010BlackRS23;JvWizards;cxPageControlRS23;dxSkinStardustRS23;cxSchedulerGridRS23;dbexpress;IndyCore;dxSkinSharpPlusRS23;JvPageComps;dsnap;DataSnapCommon;emsclient;FireDACCommon;dxSkinOffice2010BlueRS23;JvDB;dxSkinVS2010RS23;dxSkinMetropolisRS23;DataSnapConnectors;cxVerticalGridRS23;soapserver;dxSkinCaramelRS23;frxTee23;dxTileControlRS23;JclDeveloperTools;cxGridRS23;SampleListViewRatingsAppearancePackage;FireDACOracleDriver;DBXMySQLDriver;JvCmp;pckUCMidasConn;DBXFirebirdDriver;ACBr_Sintegra;FireDACCommonDriver;RDPrint;inet;IndyIPCommon;JvCustom;dxSkinDarkRoomRS23;dxDockingRS23;vcl;dxSkinOffice2007GreenRS23;dxPScxExtCommonRS23;JvXPCtrls;dxSkinsCoreRS23;FireDACDb2Driver;dxThemeRS23;dxSkinsdxRibbonPainterRS23;dxSkinVisualStudio2013BlueRS23;RtmRxCtl230;mxExport_Seattle;pckUCIBXConn;dxSkinMoneyTwinsRS23;pckHistorico;dxPSdxFCLnkRS23;dxtrmdRS23;TeeDB;FireDAC;cxSchedulerTreeBrowserRS23;JvCore;ACBr_Comum;dxFireDACServerModeRS23;dxSkinBlueRS23;JvCrypt;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;cxEditorsRS23;dxSkinGlassOceansRS23;JvDlgs;JvRuntimeDesign;dxSkinsdxNavBarPainterRS23;dxGaugeControlRS23;ibxpress;Tee;cxPivotGridOLAPRS23;DataSnapServer;dxSkinSharpRS23;mxNativeExcel_Seattle;ibxbindings;RtmRxDB230;vclwinx;FireDACDSDriver;ACBr_OpenSSL;dxSkinBlueprintRS23;pckMD5;ACBr_DFeComum;CustomIPTransport;vcldsnap;dxSkinOffice2007BlackRS23;dxSkinOffice2013LightGrayRS23;bindcomp;fgx;ACBr_Serial;DBXInformixDriver;dxPSdxGaugeControlLnkRS23;dxPScxPivotGridLnkRS23;dxorgcRS23;dxPSdxDBTVLnkRS23;vclribbon;dbxcds;FreeBoleto_D11;ACBr_NFCeECFVirtual;adortl;ACBr_BoletoFR;dxComnRS23;dsnapxml;dbrtl;inetdbxpress;IndyProtocols;cxExportRS23;dxSkinOffice2016DarkRS23;JclContainers;dxSkinVisualStudio2013DarkRS23;dxSkinscxSchedulerPainterRS23;fmxase;$(DCC_UsePackage) 63 | 1033 64 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= 65 | true 66 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 67 | 68 | 69 | DBXSqliteDriver;DBXDb2Driver;vclactnband;vclFireDAC;dxPSLnksRS23;dxPSdxLCLnkRS23;tethering;cxDataRS23;dxPSdxOCLnkRS23;dxTabbedMDIRS23;FireDACADSDriver;dxSkinBlackRS23;dxSkinLondonLiquidSkyRS23;pckUserControl_DT;dxDBXServerModeRS23;dxHttpIndyRequestRS23;dxPScxGridLnkRS23;cxSchedulerRS23;FireDACMSSQLDriver;vcltouch;vcldb;Intraweb;dxWizardControlRS23;dxPScxCommonRS23;dxSkinMcSkinRS23;dxSkinOffice2007BlueRS23;dxBarRS23;cxSchedulerRibbonStyleEventEditorRS23;dxSkinOffice2013WhiteRS23;uniGUI23Chart;dxPSTeeChartRS23;cxLibraryRS23;dxSkinVisualStudio2013LightRS23;vclib;cxPivotGridChartRS23;dxSkinSummer2008RS23;dxPSdxDBOCLnkRS23;dxGDIPlusRS23;dxSkinDarkSideRS23;FireDACDBXDriver;dxSkinFoggyRS23;dxSkinSevenRS23;vclx;dxSkinOffice2010SilverRS23;dxdborRS23;RESTBackendComponents;dxLayoutControlRS23;dxPSPrVwRibbonRS23;VCLRESTComponents;dxSkinDevExpressStyleRS23;uniGUI23m;dxSkinWhiteprintRS23;vclie;bindengine;CloudService;FireDACMySQLDriver;pckUCDataConnector;dxSkinOffice2013DarkGrayRS23;DataSnapClient;dxPScxPCProdRS23;bindcompdbx;uniGUI23VCL;DBXSybaseASEDriver;IndyIPServer;dxSkinPumpkinRS23;IndySystem;dsnapcon;cxTreeListdxBarPopupMenuRS23;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;dxSkinLilianRS23;dxBarDBNavRS23;dxFlowChartRS23;dxSkinOffice2016ColorfulRS23;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;dxSpreadSheetRS23;dxSkinOffice2007PinkRS23;dxPSdxSpreadSheetLnkRS23;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;dxSkinHighContrastRS23;dxSkinSevenClassicRS23;rtl;dxSkinTheAsphaltWorldRS23;DbxClientDriver;dxSkinDevExpressDarkStyleRS23;DBXSybaseASADriver;dxNavBarRS23;dxSkinMetropolisDarkRS23;dxRichEditControlRS23;appanalytics;cxPivotGridRS23;dxSkinsdxDLPainterRS23;IndyIPClient;dxRibbonRS23;dxPScxVGridLnkRS23;bindcompvcl;dxSkinOffice2007SilverRS23;dxPScxTLLnkRS23;dxMapControlRS23;TeeUI;VclSmp;dxPScxSchedulerLnkRS23;cxTreeListRS23;FireDACODBCDriver;DataSnapIndy10ServerTransport;dxRibbonCustomizationFormRS23;dxPSRichEditControlLnkRS23;dxBarExtDBItemsRS23;DataSnapProviderClient;FireDACMongoDBDriver;dxSkiniMaginaryRS23;dxSpellCheckerRS23;dxSkinsdxBarPainterRS23;dxSkinCoffeeRS23;DataSnapServerMidas;RESTComponents;DBXInterBaseDriver;dxADOServerModeRS23;emsclientfiredac;DataSnapFireDAC;dxmdsRS23;dxPSDBTeeChartRS23;dxdbtrRS23;dxSkinLiquidSkyRS23;dxSkinSpringTimeRS23;dxPSCoreRS23;dxSkinscxPCPainterRS23;DBXMSSQLDriver;dxSkinXmas2008BlueRS23;DatasnapConnectorsFreePascal;bindcompfmx;DBXOracleDriver;dxSkinSilverRS23;dxSkinValentineRS23;inetdb;FmxTeeUI;dxBarExtItemsRS23;FireDACIBDriver;fmx;fmxdae;dxServerModeRS23;dxPsPrVwAdvRS23;dxSkinOffice2010BlackRS23;cxPageControlRS23;dxSkinStardustRS23;cxSchedulerGridRS23;dbexpress;IndyCore;dxSkinSharpPlusRS23;dsnap;DataSnapCommon;emsclient;FireDACCommon;dxSkinOffice2010BlueRS23;dxSkinVS2010RS23;dxSkinMetropolisRS23;DataSnapConnectors;cxVerticalGridRS23;soapserver;dxSkinCaramelRS23;dxTileControlRS23;cxGridRS23;FireDACOracleDriver;DBXMySQLDriver;pckUCMidasConn;DBXFirebirdDriver;FireDACCommonDriver;inet;IndyIPCommon;dxSkinDarkRoomRS23;dxDockingRS23;vcl;dxSkinOffice2007GreenRS23;dxPScxExtCommonRS23;dxSkinsCoreRS23;FireDACDb2Driver;dxThemeRS23;dxSkinsdxRibbonPainterRS23;dxSkinVisualStudio2013BlueRS23;pckUCIBXConn;dxSkinMoneyTwinsRS23;pckHistorico;dxPSdxFCLnkRS23;dxtrmdRS23;TeeDB;FireDAC;cxSchedulerTreeBrowserRS23;dxFireDACServerModeRS23;dxSkinBlueRS23;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;cxEditorsRS23;dxSkinGlassOceansRS23;dxSkinsdxNavBarPainterRS23;dxGaugeControlRS23;ibxpress;Tee;cxPivotGridOLAPRS23;DataSnapServer;dxSkinSharpRS23;ibxbindings;vclwinx;FireDACDSDriver;dxSkinBlueprintRS23;pckMD5;CustomIPTransport;vcldsnap;dxSkinOffice2007BlackRS23;dxSkinOffice2013LightGrayRS23;bindcomp;DBXInformixDriver;dxPSdxGaugeControlLnkRS23;dxPScxPivotGridLnkRS23;dxorgcRS23;dxPSdxDBTVLnkRS23;vclribbon;dbxcds;adortl;dxComnRS23;dsnapxml;dbrtl;inetdbxpress;IndyProtocols;cxExportRS23;dxSkinOffice2016DarkRS23;dxSkinVisualStudio2013DarkRS23;dxSkinscxSchedulerPainterRS23;fmxase;$(DCC_UsePackage) 70 | 71 | 72 | DEBUG;$(DCC_Define) 73 | true 74 | false 75 | true 76 | true 77 | true 78 | 79 | 80 | ..\..\lib;..\..\src;$(DCC_UnitSearchPath) 81 | 1033 82 | true 83 | true 84 | true 85 | false 86 | 87 | 88 | false 89 | RELEASE;$(DCC_Define) 90 | 0 91 | 0 92 | 93 | 94 | true 95 | true 96 | 97 | 98 | 99 | MainSource 100 | 101 | 102 |
Form1
103 | dfm 104 |
105 | 106 | 107 | ResourceItem 108 | RCDATA 109 | routes 110 | 111 | 112 | Cfg_2 113 | Base 114 | 115 | 116 | Base 117 | 118 | 119 | Cfg_1 120 | Base 121 | 122 |
123 | 124 | Delphi.Personality.12 125 | Application 126 | 127 | 128 | 129 | (untitled) 130 | (untitled) 131 | Embarcadero C++Builder Office 2000 Servers Package 132 | Embarcadero C++Builder Office XP Servers Package 133 | Microsoft Office 2000 Sample Automation Server Wrapper Components 134 | Microsoft Office XP Sample Automation Server Wrapper Components 135 | 136 | 137 | server_EAS.dpr 138 | 139 | 140 | 141 | 142 | 143 | .\ 144 | true 145 | 146 | 147 | 148 | 149 | server_EAS.exe 150 | true 151 | 152 | 153 | 154 | 155 | 1 156 | 157 | 158 | 1 159 | 160 | 161 | 162 | 163 | Contents\Resources 164 | 1 165 | 166 | 167 | 168 | 169 | classes 170 | 1 171 | 172 | 173 | 174 | 175 | Contents\MacOS 176 | 0 177 | 178 | 179 | 1 180 | 181 | 182 | Contents\MacOS 183 | 1 184 | 185 | 186 | 187 | 188 | 1 189 | 190 | 191 | 1 192 | 193 | 194 | 1 195 | 196 | 197 | 198 | 199 | res\drawable-xxhdpi 200 | 1 201 | 202 | 203 | 204 | 205 | library\lib\mips 206 | 1 207 | 208 | 209 | 210 | 211 | 0 212 | 213 | 214 | 1 215 | 216 | 217 | Contents\MacOS 218 | 1 219 | 220 | 221 | 1 222 | 223 | 224 | library\lib\armeabi-v7a 225 | 1 226 | 227 | 228 | 1 229 | 230 | 231 | 232 | 233 | 0 234 | 235 | 236 | Contents\MacOS 237 | 1 238 | .framework 239 | 240 | 241 | 242 | 243 | 1 244 | 245 | 246 | 1 247 | 248 | 249 | 1 250 | 251 | 252 | 253 | 254 | 1 255 | 256 | 257 | 1 258 | 259 | 260 | 1 261 | 262 | 263 | 264 | 265 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 266 | 1 267 | 268 | 269 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 270 | 1 271 | 272 | 273 | 274 | 275 | library\lib\x86 276 | 1 277 | 278 | 279 | 280 | 281 | 1 282 | 283 | 284 | 1 285 | 286 | 287 | 1 288 | 289 | 290 | 291 | 292 | 1 293 | 294 | 295 | 1 296 | 297 | 298 | 1 299 | 300 | 301 | 302 | 303 | library\lib\armeabi 304 | 1 305 | 306 | 307 | 308 | 309 | 0 310 | 311 | 312 | 1 313 | 314 | 315 | Contents\MacOS 316 | 1 317 | 318 | 319 | 320 | 321 | 1 322 | 323 | 324 | 1 325 | 326 | 327 | 1 328 | 329 | 330 | 331 | 332 | res\drawable-normal 333 | 1 334 | 335 | 336 | 337 | 338 | res\drawable-xhdpi 339 | 1 340 | 341 | 342 | 343 | 344 | res\drawable-large 345 | 1 346 | 347 | 348 | 349 | 350 | 1 351 | 352 | 353 | 1 354 | 355 | 356 | 1 357 | 358 | 359 | 360 | 361 | ../ 362 | 1 363 | 364 | 365 | ../ 366 | 1 367 | 368 | 369 | 370 | 371 | res\drawable-hdpi 372 | 1 373 | 374 | 375 | 376 | 377 | library\lib\armeabi-v7a 378 | 1 379 | 380 | 381 | 382 | 383 | Contents 384 | 1 385 | 386 | 387 | 388 | 389 | ../ 390 | 1 391 | 392 | 393 | 394 | 395 | 1 396 | 397 | 398 | 1 399 | 400 | 401 | 1 402 | 403 | 404 | 405 | 406 | res\values 407 | 1 408 | 409 | 410 | 411 | 412 | res\drawable-small 413 | 1 414 | 415 | 416 | 417 | 418 | res\drawable 419 | 1 420 | 421 | 422 | 423 | 424 | 1 425 | 426 | 427 | 1 428 | 429 | 430 | 1 431 | 432 | 433 | 434 | 435 | 1 436 | 437 | 438 | 439 | 440 | res\drawable 441 | 1 442 | 443 | 444 | 445 | 446 | 0 447 | 448 | 449 | 0 450 | 451 | 452 | Contents\Resources\StartUp\ 453 | 0 454 | 455 | 456 | 0 457 | 458 | 459 | 0 460 | 461 | 462 | 0 463 | 464 | 465 | 466 | 467 | library\lib\armeabi-v7a 468 | 1 469 | 470 | 471 | 472 | 473 | 0 474 | .bpl 475 | 476 | 477 | 1 478 | .dylib 479 | 480 | 481 | Contents\MacOS 482 | 1 483 | .dylib 484 | 485 | 486 | 1 487 | .dylib 488 | 489 | 490 | 1 491 | .dylib 492 | 493 | 494 | 495 | 496 | res\drawable-mdpi 497 | 1 498 | 499 | 500 | 501 | 502 | res\drawable-xlarge 503 | 1 504 | 505 | 506 | 507 | 508 | res\drawable-ldpi 509 | 1 510 | 511 | 512 | 513 | 514 | 0 515 | .dll;.bpl 516 | 517 | 518 | 1 519 | .dylib 520 | 521 | 522 | Contents\MacOS 523 | 1 524 | .dylib 525 | 526 | 527 | 1 528 | .dylib 529 | 530 | 531 | 1 532 | .dylib 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | True 545 | False 546 | 547 | 548 | 12 549 | 550 | 551 | 552 | 553 |
554 | -------------------------------------------------------------------------------- /samples/GET QueryParam/GetQueryParam.dproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | {EFAD681A-8FDD-4C7F-AA32-665EBA8DC6C1} 4 | 18.0 5 | VCL 6 | GetQueryParam.dpr 7 | True 8 | Debug 9 | Win32 10 | 1 11 | Application 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 | Cfg_1 34 | true 35 | true 36 | 37 | 38 | true 39 | Base 40 | true 41 | 42 | 43 | true 44 | Cfg_2 45 | true 46 | true 47 | 48 | 49 | System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) 50 | $(BDS)\bin\delphi_PROJECTICON.ico 51 | GetQueryParam 52 | .\$(Platform)\$(Config) 53 | .\$(Platform)\$(Config) 54 | false 55 | false 56 | false 57 | false 58 | false 59 | 60 | 61 | $(BDS)\bin\default_app.manifest 62 | DBXSqliteDriver;DBXDb2Driver;OCX_Servers;dxCoreRS23;vclactnband;frxe23;vclFireDAC;dxPSLnksRS23;dxPSdxLCLnkRS23;tethering;cxDataRS23;dxPSdxOCLnkRS23;dxTabbedMDIRS23;FireDACADSDriver;dxSkinBlackRS23;dxSkinLondonLiquidSkyRS23;JvPluginSystem;pckUserControl_DT;dxDBXServerModeRS23;dxHttpIndyRequestRS23;dxPScxGridLnkRS23;cxSchedulerRS23;FireDACMSSQLDriver;vcltouch;ACBr_NFe;ACBr_NFeDanfeFR;vcldb;Intraweb;svn;dxWizardControlRS23;dxPScxCommonRS23;dxSkinMcSkinRS23;JvBands;ACBr_NFeDanfeESCPOS;dxSkinOffice2007BlueRS23;JvJans;Rave110VCL;dxBarRS23;pckUserControl_RT;cxSchedulerRibbonStyleEventEditorRS23;dxSkinOffice2013WhiteRS23;JvDotNetCtrls;uniGUI23Chart;dxPSTeeChartRS23;cxLibraryRS23;dxSkinVisualStudio2013LightRS23;vclib;cxPivotGridChartRS23;dxSkinSummer2008RS23;dxPSdxDBOCLnkRS23;dxGDIPlusRS23;dxSkinDarkSideRS23;FireDACDBXDriver;dxSkinFoggyRS23;dxSkinSevenRS23;ACBr_NFSeDanfseFR;vclx;dxSkinOffice2010SilverRS23;dxdborRS23;RESTBackendComponents;dxLayoutControlRS23;dxPSPrVwRibbonRS23;VCLRESTComponents;dxSkinDevExpressStyleRS23;uniGUI23m;TAcquireImage;dxSkinWhiteprintRS23;vclie;bindengine;CloudService;JvHMI;FireDACMySQLDriver;pckUCDataConnector;dxSkinOffice2013DarkGrayRS23;DataSnapClient;dxPScxPCProdRS23;bindcompdbx;uniGUI23VCL;ACBr_TCP;DBXSybaseASEDriver;IndyIPServer;ACBr_CTe;dxSkinPumpkinRS23;IndySystem;dsnapcon;JustifyRichEdit;ACBr_synapse;cxTreeListdxBarPopupMenuRS23;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;ACBr_SPEDImportar;dxSkinLilianRS23;Jcl;ACBr_SPED;ACBr_MDFe;dxBarDBNavRS23;dxFlowChartRS23;dxSkinOffice2016ColorfulRS23;DBXOdbcDriver;FireDACTDataDriver;FMXTee;fs23;soaprtl;DbxCommonDriver;dxSpreadSheetRS23;JvManagedThreads;Png;dxSkinOffice2007PinkRS23;dxPSdxSpreadSheetLnkRS23;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;dxSkinHighContrastRS23;dxSkinSevenClassicRS23;rtl;dxSkinTheAsphaltWorldRS23;DbxClientDriver;dxSkinDevExpressDarkStyleRS23;DBXSybaseASADriver;dxNavBarRS23;dxSkinMetropolisDarkRS23;JvTimeFramework;JvSystem;SampleListViewMultiDetailAppearancePackage;dxRichEditControlRS23;JvStdCtrls;appanalytics;cxPivotGridRS23;dxSkinsdxDLPainterRS23;IndyIPClient;dxRibbonRS23;dxPScxVGridLnkRS23;bindcompvcl;frxDB23;dxSkinOffice2007SilverRS23;dxPScxTLLnkRS23;dxMapControlRS23;TeeUI;JvDocking;JvPascalInterpreter;VclSmp;dxPScxSchedulerLnkRS23;cxTreeListRS23;FireDACODBCDriver;JclVcl;DataSnapIndy10ServerTransport;dxRibbonCustomizationFormRS23;dxPSRichEditControlLnkRS23;ACBr_Boleto;dxBarExtDBItemsRS23;DataSnapProviderClient;FireDACMongoDBDriver;dxSkiniMaginaryRS23;frx23;dxSpellCheckerRS23;JvControls;dxSkinsdxBarPainterRS23;ACBr_NFSe;JvPrintPreview;dxSkinCoffeeRS23;DataSnapServerMidas;RESTComponents;DBXInterBaseDriver;dxADOServerModeRS23;emsclientfiredac;DataSnapFireDAC;svnui;dxmdsRS23;dxPSDBTeeChartRS23;dxdbtrRS23;dxSkinLiquidSkyRS23;dxSkinSpringTimeRS23;JvGlobus;dxPSCoreRS23;dxSkinscxPCPainterRS23;DBXMSSQLDriver;JvMM;dxSkinXmas2008BlueRS23;DatasnapConnectorsFreePascal;bindcompfmx;JvNet;DBXOracleDriver;dxSkinSilverRS23;dxSkinValentineRS23;inetdb;JvAppFrm;ACBr_Diversos;ACBr_TXTComum;FmxTeeUI;dxBarExtItemsRS23;FireDACIBDriver;fmx;fmxdae;dxServerModeRS23;ACBr_CTeDacteFR;dxPsPrVwAdvRS23;dxSkinOffice2010BlackRS23;JvWizards;cxPageControlRS23;dxSkinStardustRS23;cxSchedulerGridRS23;dbexpress;IndyCore;dxSkinSharpPlusRS23;JvPageComps;dsnap;DataSnapCommon;emsclient;FireDACCommon;dxSkinOffice2010BlueRS23;JvDB;dxSkinVS2010RS23;dxSkinMetropolisRS23;DataSnapConnectors;cxVerticalGridRS23;soapserver;dxSkinCaramelRS23;frxTee23;dxTileControlRS23;JclDeveloperTools;cxGridRS23;SampleListViewRatingsAppearancePackage;FireDACOracleDriver;DBXMySQLDriver;JvCmp;pckUCMidasConn;DBXFirebirdDriver;ACBr_Sintegra;FireDACCommonDriver;RDPrint;inet;IndyIPCommon;JvCustom;dxSkinDarkRoomRS23;dxDockingRS23;vcl;dxSkinOffice2007GreenRS23;dxPScxExtCommonRS23;JvXPCtrls;dxSkinsCoreRS23;FireDACDb2Driver;dxThemeRS23;dxSkinsdxRibbonPainterRS23;dxSkinVisualStudio2013BlueRS23;RtmRxCtl230;mxExport_Seattle;pckUCIBXConn;dxSkinMoneyTwinsRS23;pckHistorico;dxPSdxFCLnkRS23;dxtrmdRS23;TeeDB;FireDAC;cxSchedulerTreeBrowserRS23;JvCore;ACBr_Comum;dxFireDACServerModeRS23;dxSkinBlueRS23;JvCrypt;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;cxEditorsRS23;dxSkinGlassOceansRS23;JvDlgs;JvRuntimeDesign;dxSkinsdxNavBarPainterRS23;dxGaugeControlRS23;ibxpress;Tee;cxPivotGridOLAPRS23;DataSnapServer;dxSkinSharpRS23;mxNativeExcel_Seattle;ibxbindings;RtmRxDB230;vclwinx;FireDACDSDriver;ACBr_OpenSSL;dxSkinBlueprintRS23;pckMD5;ACBr_DFeComum;CustomIPTransport;vcldsnap;dxSkinOffice2007BlackRS23;dxSkinOffice2013LightGrayRS23;bindcomp;fgx;ACBr_Serial;DBXInformixDriver;dxPSdxGaugeControlLnkRS23;dxPScxPivotGridLnkRS23;dxorgcRS23;dxPSdxDBTVLnkRS23;vclribbon;dbxcds;FreeBoleto_D11;ACBr_NFCeECFVirtual;adortl;ACBr_BoletoFR;dxComnRS23;dsnapxml;dbrtl;inetdbxpress;IndyProtocols;cxExportRS23;dxSkinOffice2016DarkRS23;JclContainers;dxSkinVisualStudio2013DarkRS23;dxSkinscxSchedulerPainterRS23;fmxase;$(DCC_UsePackage) 63 | 1033 64 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= 65 | true 66 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 67 | 68 | 69 | DBXSqliteDriver;DBXDb2Driver;vclactnband;vclFireDAC;dxPSLnksRS23;dxPSdxLCLnkRS23;tethering;cxDataRS23;dxPSdxOCLnkRS23;dxTabbedMDIRS23;FireDACADSDriver;dxSkinBlackRS23;dxSkinLondonLiquidSkyRS23;pckUserControl_DT;dxDBXServerModeRS23;dxHttpIndyRequestRS23;dxPScxGridLnkRS23;cxSchedulerRS23;FireDACMSSQLDriver;vcltouch;vcldb;Intraweb;dxWizardControlRS23;dxPScxCommonRS23;dxSkinMcSkinRS23;dxSkinOffice2007BlueRS23;dxBarRS23;cxSchedulerRibbonStyleEventEditorRS23;dxSkinOffice2013WhiteRS23;uniGUI23Chart;dxPSTeeChartRS23;cxLibraryRS23;dxSkinVisualStudio2013LightRS23;vclib;cxPivotGridChartRS23;dxSkinSummer2008RS23;dxPSdxDBOCLnkRS23;dxGDIPlusRS23;dxSkinDarkSideRS23;FireDACDBXDriver;dxSkinFoggyRS23;dxSkinSevenRS23;vclx;dxSkinOffice2010SilverRS23;dxdborRS23;RESTBackendComponents;dxLayoutControlRS23;dxPSPrVwRibbonRS23;VCLRESTComponents;dxSkinDevExpressStyleRS23;uniGUI23m;dxSkinWhiteprintRS23;vclie;bindengine;CloudService;FireDACMySQLDriver;pckUCDataConnector;dxSkinOffice2013DarkGrayRS23;DataSnapClient;dxPScxPCProdRS23;bindcompdbx;uniGUI23VCL;DBXSybaseASEDriver;IndyIPServer;dxSkinPumpkinRS23;IndySystem;dsnapcon;cxTreeListdxBarPopupMenuRS23;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;dxSkinLilianRS23;dxBarDBNavRS23;dxFlowChartRS23;dxSkinOffice2016ColorfulRS23;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;dxSpreadSheetRS23;dxSkinOffice2007PinkRS23;dxPSdxSpreadSheetLnkRS23;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;dxSkinHighContrastRS23;dxSkinSevenClassicRS23;rtl;dxSkinTheAsphaltWorldRS23;DbxClientDriver;dxSkinDevExpressDarkStyleRS23;DBXSybaseASADriver;dxNavBarRS23;dxSkinMetropolisDarkRS23;dxRichEditControlRS23;appanalytics;cxPivotGridRS23;dxSkinsdxDLPainterRS23;IndyIPClient;dxRibbonRS23;dxPScxVGridLnkRS23;bindcompvcl;dxSkinOffice2007SilverRS23;dxPScxTLLnkRS23;dxMapControlRS23;TeeUI;VclSmp;dxPScxSchedulerLnkRS23;cxTreeListRS23;FireDACODBCDriver;DataSnapIndy10ServerTransport;dxRibbonCustomizationFormRS23;dxPSRichEditControlLnkRS23;dxBarExtDBItemsRS23;DataSnapProviderClient;FireDACMongoDBDriver;dxSkiniMaginaryRS23;dxSpellCheckerRS23;dxSkinsdxBarPainterRS23;dxSkinCoffeeRS23;DataSnapServerMidas;RESTComponents;DBXInterBaseDriver;dxADOServerModeRS23;emsclientfiredac;DataSnapFireDAC;dxmdsRS23;dxPSDBTeeChartRS23;dxdbtrRS23;dxSkinLiquidSkyRS23;dxSkinSpringTimeRS23;dxPSCoreRS23;dxSkinscxPCPainterRS23;DBXMSSQLDriver;dxSkinXmas2008BlueRS23;DatasnapConnectorsFreePascal;bindcompfmx;DBXOracleDriver;dxSkinSilverRS23;dxSkinValentineRS23;inetdb;FmxTeeUI;dxBarExtItemsRS23;FireDACIBDriver;fmx;fmxdae;dxServerModeRS23;dxPsPrVwAdvRS23;dxSkinOffice2010BlackRS23;cxPageControlRS23;dxSkinStardustRS23;cxSchedulerGridRS23;dbexpress;IndyCore;dxSkinSharpPlusRS23;dsnap;DataSnapCommon;emsclient;FireDACCommon;dxSkinOffice2010BlueRS23;dxSkinVS2010RS23;dxSkinMetropolisRS23;DataSnapConnectors;cxVerticalGridRS23;soapserver;dxSkinCaramelRS23;dxTileControlRS23;cxGridRS23;FireDACOracleDriver;DBXMySQLDriver;pckUCMidasConn;DBXFirebirdDriver;FireDACCommonDriver;inet;IndyIPCommon;dxSkinDarkRoomRS23;dxDockingRS23;vcl;dxSkinOffice2007GreenRS23;dxPScxExtCommonRS23;dxSkinsCoreRS23;FireDACDb2Driver;dxThemeRS23;dxSkinsdxRibbonPainterRS23;dxSkinVisualStudio2013BlueRS23;pckUCIBXConn;dxSkinMoneyTwinsRS23;pckHistorico;dxPSdxFCLnkRS23;dxtrmdRS23;TeeDB;FireDAC;cxSchedulerTreeBrowserRS23;dxFireDACServerModeRS23;dxSkinBlueRS23;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;cxEditorsRS23;dxSkinGlassOceansRS23;dxSkinsdxNavBarPainterRS23;dxGaugeControlRS23;ibxpress;Tee;cxPivotGridOLAPRS23;DataSnapServer;dxSkinSharpRS23;ibxbindings;vclwinx;FireDACDSDriver;dxSkinBlueprintRS23;pckMD5;CustomIPTransport;vcldsnap;dxSkinOffice2007BlackRS23;dxSkinOffice2013LightGrayRS23;bindcomp;DBXInformixDriver;dxPSdxGaugeControlLnkRS23;dxPScxPivotGridLnkRS23;dxorgcRS23;dxPSdxDBTVLnkRS23;vclribbon;dbxcds;adortl;dxComnRS23;dsnapxml;dbrtl;inetdbxpress;IndyProtocols;cxExportRS23;dxSkinOffice2016DarkRS23;dxSkinVisualStudio2013DarkRS23;dxSkinscxSchedulerPainterRS23;fmxase;$(DCC_UsePackage) 70 | 71 | 72 | DEBUG;$(DCC_Define) 73 | true 74 | false 75 | true 76 | true 77 | true 78 | 79 | 80 | ..\..\src;..\..\lib;$(DCC_UnitSearchPath) 81 | 1033 82 | true 83 | true 84 | true 85 | false 86 | 87 | 88 | false 89 | RELEASE;$(DCC_Define) 90 | 0 91 | 0 92 | 93 | 94 | true 95 | true 96 | 97 | 98 | 99 | MainSource 100 | 101 | 102 |
frmMain
103 | dfm 104 |
105 | 106 | 107 | ResourceItem 108 | RCDATA 109 | routes 110 | 111 | 112 | Cfg_2 113 | Base 114 | 115 | 116 | Base 117 | 118 | 119 | Cfg_1 120 | Base 121 | 122 |
123 | 124 | Delphi.Personality.12 125 | Application 126 | 127 | 128 | 129 | (untitled) 130 | (untitled) 131 | Embarcadero C++Builder Office 2000 Servers Package 132 | Embarcadero C++Builder Office XP Servers Package 133 | Microsoft Office 2000 Sample Automation Server Wrapper Components 134 | Microsoft Office XP Sample Automation Server Wrapper Components 135 | 136 | 137 | GetQueryParam.dpr 138 | 139 | 140 | 141 | 142 | 143 | GetQueryParam.exe 144 | true 145 | 146 | 147 | 148 | 149 | .\ 150 | true 151 | 152 | 153 | 154 | 155 | 0 156 | .dll;.bpl 157 | 158 | 159 | 1 160 | .dylib 161 | 162 | 163 | Contents\MacOS 164 | 1 165 | .dylib 166 | 167 | 168 | 1 169 | .dylib 170 | 171 | 172 | 1 173 | .dylib 174 | 175 | 176 | 177 | 178 | Contents\Resources 179 | 1 180 | 181 | 182 | 183 | 184 | classes 185 | 1 186 | 187 | 188 | 189 | 190 | Contents\MacOS 191 | 0 192 | 193 | 194 | 1 195 | 196 | 197 | Contents\MacOS 198 | 1 199 | 200 | 201 | 202 | 203 | 1 204 | 205 | 206 | 1 207 | 208 | 209 | 1 210 | 211 | 212 | 213 | 214 | res\drawable-xxhdpi 215 | 1 216 | 217 | 218 | 219 | 220 | library\lib\mips 221 | 1 222 | 223 | 224 | 225 | 226 | 0 227 | 228 | 229 | 1 230 | 231 | 232 | Contents\MacOS 233 | 1 234 | 235 | 236 | 1 237 | 238 | 239 | library\lib\armeabi-v7a 240 | 1 241 | 242 | 243 | 1 244 | 245 | 246 | 247 | 248 | 0 249 | 250 | 251 | Contents\MacOS 252 | 1 253 | .framework 254 | 255 | 256 | 257 | 258 | 1 259 | 260 | 261 | 1 262 | 263 | 264 | 1 265 | 266 | 267 | 268 | 269 | 1 270 | 271 | 272 | 1 273 | 274 | 275 | 1 276 | 277 | 278 | 279 | 280 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 281 | 1 282 | 283 | 284 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 285 | 1 286 | 287 | 288 | 289 | 290 | library\lib\x86 291 | 1 292 | 293 | 294 | 295 | 296 | 1 297 | 298 | 299 | 1 300 | 301 | 302 | 1 303 | 304 | 305 | 306 | 307 | 1 308 | 309 | 310 | 1 311 | 312 | 313 | 1 314 | 315 | 316 | 317 | 318 | library\lib\armeabi 319 | 1 320 | 321 | 322 | 323 | 324 | 0 325 | 326 | 327 | 1 328 | 329 | 330 | Contents\MacOS 331 | 1 332 | 333 | 334 | 335 | 336 | 1 337 | 338 | 339 | 1 340 | 341 | 342 | 1 343 | 344 | 345 | 346 | 347 | res\drawable-normal 348 | 1 349 | 350 | 351 | 352 | 353 | res\drawable-xhdpi 354 | 1 355 | 356 | 357 | 358 | 359 | res\drawable-large 360 | 1 361 | 362 | 363 | 364 | 365 | 1 366 | 367 | 368 | 1 369 | 370 | 371 | 1 372 | 373 | 374 | 375 | 376 | ../ 377 | 1 378 | 379 | 380 | ../ 381 | 1 382 | 383 | 384 | 385 | 386 | res\drawable-hdpi 387 | 1 388 | 389 | 390 | 391 | 392 | library\lib\armeabi-v7a 393 | 1 394 | 395 | 396 | 397 | 398 | Contents 399 | 1 400 | 401 | 402 | 403 | 404 | ../ 405 | 1 406 | 407 | 408 | 409 | 410 | 1 411 | 412 | 413 | 1 414 | 415 | 416 | 1 417 | 418 | 419 | 420 | 421 | res\values 422 | 1 423 | 424 | 425 | 426 | 427 | res\drawable-small 428 | 1 429 | 430 | 431 | 432 | 433 | res\drawable 434 | 1 435 | 436 | 437 | 438 | 439 | 1 440 | 441 | 442 | 1 443 | 444 | 445 | 1 446 | 447 | 448 | 449 | 450 | 1 451 | 452 | 453 | 454 | 455 | res\drawable 456 | 1 457 | 458 | 459 | 460 | 461 | 0 462 | 463 | 464 | 0 465 | 466 | 467 | Contents\Resources\StartUp\ 468 | 0 469 | 470 | 471 | 0 472 | 473 | 474 | 0 475 | 476 | 477 | 0 478 | 479 | 480 | 481 | 482 | library\lib\armeabi-v7a 483 | 1 484 | 485 | 486 | 487 | 488 | 0 489 | .bpl 490 | 491 | 492 | 1 493 | .dylib 494 | 495 | 496 | Contents\MacOS 497 | 1 498 | .dylib 499 | 500 | 501 | 1 502 | .dylib 503 | 504 | 505 | 1 506 | .dylib 507 | 508 | 509 | 510 | 511 | res\drawable-mdpi 512 | 1 513 | 514 | 515 | 516 | 517 | res\drawable-xlarge 518 | 1 519 | 520 | 521 | 522 | 523 | res\drawable-ldpi 524 | 1 525 | 526 | 527 | 528 | 529 | 1 530 | 531 | 532 | 1 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | True 545 | False 546 | 547 | 548 | 12 549 | 550 | 551 | 552 | 553 |
554 | --------------------------------------------------------------------------------