HttpServerService.pas 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. program HttpServerService;
  2. uses
  3. SysUtils,
  4. Quick.Commons,
  5. Quick.Logger.Intf,
  6. Quick.Console,
  7. Quick.AppService,
  8. Quick.HttpServer,
  9. Quick.HttpServer.Request,
  10. Quick.HttpServer.Response,
  11. HttpServerService.Logger;
  12. type
  13. TMyHttpServer = class(THttpServer)
  14. public
  15. procedure ProcessRequest(aRequest: IHttpRequest; aResponse: IHttpResponse); override;
  16. end;
  17. procedure TMyHttpServer.ProcessRequest(aRequest: IHttpRequest; aResponse: IHttpResponse);
  18. begin
  19. aResponse.ContentText := 'Hello world!';
  20. end;
  21. var
  22. HttpServer : TMyHttpServer;
  23. Port : Integer;
  24. Logger : TQuickLogger;
  25. begin
  26. try
  27. {$IFNDEF FPC}
  28. ReportMemoryLeaksOnShutdown := True;
  29. {$ENDIF}
  30. //run as console
  31. Logger := TQuickLogger.Create;
  32. Logger.Init;
  33. if not AppService.IsRunningAsService then
  34. begin
  35. //create server
  36. cout('Init server...',etInfo);
  37. if ParamCount > 0 then
  38. begin
  39. Integer.TryParse(ParamStr(1),Port)
  40. end;
  41. //start server
  42. if Port = 0 then Port := 8080;
  43. HttpServer := TMyHttpServer.Create('127.0.0.1',Port,False,Logger);
  44. try
  45. HttpServer.Start;
  46. //Wait for Exit
  47. cout(' ',ccWhite);
  48. cout('Press [Enter] to quit',ccYellow);
  49. ConsoleWaitForEnterKey;
  50. finally
  51. HttpServer.Free;
  52. end;
  53. end
  54. else //run as a service
  55. begin
  56. AppService.DisplayName := 'Remote Server';
  57. AppService.ServiceName := 'RemoteServerSvc';
  58. AppService.CanInstallWithOtherName := True;
  59. HttpServer := TMyHttpServer.Create('127.0.0.1',Port,False,Logger);
  60. AppService.OnStop := @HttpServer.Free;
  61. AppService.OnExecute := @HttpServer.Start;
  62. AppService.CheckParams;
  63. end;
  64. except
  65. on E: Exception do
  66. Writeln(E.ClassName, ': ', E.Message);
  67. end;
  68. end.