12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- program RPCServ;
- uses SysUtils, Classes, fpAsync, HTTPSvlt, svrclass, svrclass_XMLRPC;
- type
- TServerApplication = class(TComponent)
- private
- EventLoop: TEventLoop;
- HttpServer: THttpServer;
- ServerClass: TServerClass;
- XMLRPCServlet: TServerClassXMLRPCServlet;
- procedure OnKeyboardData(Sender: TObject);
- public
- constructor Create;
- destructor Destroy; override;
- procedure Run;
- end;
- constructor TServerApplication.Create;
- begin
- inherited Create(nil);
- EventLoop := TEventLoop.Create;
- ServerClass := TServerClass.Create;
- XMLRPCServlet := TServerClassXMLRPCServlet.Create(Self);
- XMLRPCServlet.Name := 'XMLRPCServlet';
- XMLRPCServlet.ServerClass := ServerClass;
- HttpServer := THttpServer.Create(Self);
- HttpServer.EventLoop := EventLoop;
- if ParamCount = 2 then
- HttpServer.Port := StrToInt(ParamStr(1))
- else
- HttpServer.Port := 12345;
- HTTPServer.AddServlet(XMLRPCServlet, '/xmlrpc');
- WriteLn('Listening on port ', HttpServer.Port);
- end;
- destructor TServerApplication.Destroy;
- begin
- HTTPServer.Free;
- XMLRPCServlet.Free;
- ServerClass.Free;
- EventLoop.Free;
- inherited Destroy;
- end;
- procedure TServerApplication.Run;
- begin
- EventLoop.SetDataAvailableNotify(StdInputHandle, @OnKeyboardData, nil);
- HttpServer.Active := True;
- EventLoop.Run;
- end;
- procedure TServerApplication.OnKeyboardData(Sender: TObject);
- begin
- EventLoop.Break;
- end;
- var
- App: TServerApplication;
- begin
- App := TServerApplication.Create;
- try
- App.Run;
- finally
- App.Free;
- end;
- end.
|