rpcserv.pp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. program RPCServ;
  2. uses SysUtils, Classes, fpAsync, HTTPSvlt, svrclass, svrclass_XMLRPC;
  3. type
  4. TServerApplication = class(TComponent)
  5. private
  6. EventLoop: TEventLoop;
  7. HttpServer: THttpServer;
  8. ServerClass: TServerClass;
  9. XMLRPCServlet: TServerClassXMLRPCServlet;
  10. procedure OnKeyboardData(Sender: TObject);
  11. public
  12. constructor Create;
  13. destructor Destroy; override;
  14. procedure Run;
  15. end;
  16. constructor TServerApplication.Create;
  17. begin
  18. inherited Create(nil);
  19. EventLoop := TEventLoop.Create;
  20. ServerClass := TServerClass.Create;
  21. XMLRPCServlet := TServerClassXMLRPCServlet.Create(Self);
  22. XMLRPCServlet.Name := 'XMLRPCServlet';
  23. XMLRPCServlet.ServerClass := ServerClass;
  24. HttpServer := THttpServer.Create(Self);
  25. if ParamCount = 2 then
  26. HttpServer.Port := StrToInt(ParamStr(1))
  27. else
  28. HttpServer.Port := 12345;
  29. HTTPServer.AddServlet(XMLRPCServlet, '/xmlrpc');
  30. WriteLn('Listening on port ', HttpServer.Port);
  31. end;
  32. destructor TServerApplication.Destroy;
  33. begin
  34. HTTPServer.Free;
  35. XMLRPCServlet.Free;
  36. ServerClass.Free;
  37. EventLoop.Free;
  38. inherited Destroy;
  39. end;
  40. procedure TServerApplication.Run;
  41. begin
  42. EventLoop.SetDataAvailableNotify(StdInputHandle, @OnKeyboardData, nil);
  43. HttpServer.Start(EventLoop);
  44. EventLoop.Run;
  45. end;
  46. procedure TServerApplication.OnKeyboardData(Sender: TObject);
  47. begin
  48. EventLoop.Break;
  49. end;
  50. var
  51. App: TServerApplication;
  52. begin
  53. App := TServerApplication.Create;
  54. try
  55. App.Run;
  56. finally
  57. App.Free;
  58. end;
  59. end.