THRIFT-2195 Delphi: Add event handlers for server and processing events
Patch: Jens Geyer
diff --git a/lib/delphi/src/Thrift.Transport.pas b/lib/delphi/src/Thrift.Transport.pas
index 0d5b384..b567aef 100644
--- a/lib/delphi/src/Thrift.Transport.pas
+++ b/lib/delphi/src/Thrift.Transport.pas
@@ -129,19 +129,17 @@
end;
IServerTransport = interface
- ['{BF6B7043-DA22-47BF-8B11-2B88EC55FE12}']
+ ['{C43B87ED-69EA-47C4-B77C-15E288252900}']
procedure Listen;
procedure Close;
- function Accept: ITransport;
+ function Accept( const fnAccepting: TProc): ITransport;
end;
TServerTransportImpl = class( TInterfacedObject, IServerTransport)
protected
- function AcceptImpl: ITransport; virtual; abstract;
- public
procedure Listen; virtual; abstract;
procedure Close; virtual; abstract;
- function Accept: ITransport;
+ function Accept( const fnAccepting: TProc): ITransport; virtual; abstract;
end;
ITransportFactory = interface
@@ -226,7 +224,7 @@
FUseBufferedSocket : Boolean;
FOwnsServer : Boolean;
protected
- function AcceptImpl: ITransport; override;
+ function Accept( const fnAccepting: TProc) : ITransport; override;
public
constructor Create( const AServer: TTcpServer ); overload;
constructor Create( const AServer: TTcpServer; AClientTimeout: Integer); overload;
@@ -518,17 +516,6 @@
inherited Create(msg);
end;
-{ TServerTransportImpl }
-
-function TServerTransportImpl.Accept: ITransport;
-begin
- Result := AcceptImpl;
- if Result = nil then
- begin
- raise TTransportException.Create( 'accept() may not return NULL' );
- end;
-end;
-
{ TTransportFactoryImpl }
function TTransportFactoryImpl.GetTransport( const ATrans: ITransport): ITransport;
@@ -557,11 +544,10 @@
Create( APort, 0 );
end;
-function TServerSocketImpl.AcceptImpl: ITransport;
+function TServerSocketImpl.Accept( const fnAccepting: TProc): ITransport;
var
- ret : TCustomIpClient;
- ret2 : IStreamTransport;
- ret3 : ITransport;
+ client : TCustomIpClient;
+ trans : IStreamTransport;
begin
if FServer = nil then
begin
@@ -570,29 +556,28 @@
end;
try
- ret := TCustomIpClient.Create(nil);
- if ( not FServer.Accept( ret )) then
+ client := TCustomIpClient.Create(nil);
+
+ if Assigned(fnAccepting)
+ then fnAccepting();
+
+ if ( not FServer.Accept( client)) then
begin
- ret.Free;
+ client.Free;
Result := nil;
Exit;
end;
- if ret = nil then
+ if client = nil then
begin
Result := nil;
Exit;
end;
- ret2 := TSocketImpl.Create( ret );
- if FUseBufferedSocket then
- begin
- ret3 := TBufferedTransportImpl.Create(ret2);
- Result := ret3;
- end else
- begin
- Result := ret2;
- end;
+ trans := TSocketImpl.Create( client);
+ if FUseBufferedSocket
+ then result := TBufferedTransportImpl.Create( trans)
+ else result := trans;
except
on E: Exception do