Browse Source

Add OnReceivedData event at TBufferedNetTcpIpClient

PascalCoin 5 years ago
parent
commit
aaf0d54119
1 changed files with 13 additions and 1 deletions
  1. 13 1
      src/core/UTCPIP.pas

+ 13 - 1
src/core/UTCPIP.pas

@@ -123,7 +123,9 @@ type
     FCritical : TPCCriticalSection;
     FCritical : TPCCriticalSection;
     FLastReadTC : TTickCount;
     FLastReadTC : TTickCount;
     FBufferedNetTcpIpClientThread : TBufferedNetTcpIpClientThread;
     FBufferedNetTcpIpClientThread : TBufferedNetTcpIpClientThread;
+    FOnReceivedData: TNotifyEvent;
   protected
   protected
+    Procedure DoReceivedData; virtual;
     Function DoWaitForDataInherited(WaitMilliseconds : Integer) : Boolean;
     Function DoWaitForDataInherited(WaitMilliseconds : Integer) : Boolean;
     Procedure DoWaitForData(WaitMilliseconds : Integer; var HasData : Boolean); override;
     Procedure DoWaitForData(WaitMilliseconds : Integer; var HasData : Boolean); override;
   public
   public
@@ -133,6 +135,7 @@ type
     Function ReadBufferLock : TMemoryStream;
     Function ReadBufferLock : TMemoryStream;
     Procedure ReadBufferUnlock;
     Procedure ReadBufferUnlock;
     Property LastReadTC : TTickCount read FLastReadTC;
     Property LastReadTC : TTickCount read FLastReadTC;
+    Property OnReceivedData : TNotifyEvent read FOnReceivedData write FOnReceivedData;
   End;
   End;
 
 
   {$IFDEF Synapse}
   {$IFDEF Synapse}
@@ -630,6 +633,9 @@ var SendBuffStream : TStream;
         end;
         end;
       until (last_bytes_read<sizeof(ReceiveBuffer)) Or (Terminated) Or (Not FBufferedNetTcpIpClient.Connected);
       until (last_bytes_read<sizeof(ReceiveBuffer)) Or (Terminated) Or (Not FBufferedNetTcpIpClient.Connected);
       {$IFDEF HIGHLOG}If total_read>0 then TLog.NewLog(ltdebug,ClassName,Format('Received %d bytes. Buffer length: %d bytes',[total_read,total_size]));{$ENDIF}
       {$IFDEF HIGHLOG}If total_read>0 then TLog.NewLog(ltdebug,ClassName,Format('Received %d bytes. Buffer length: %d bytes',[total_read,total_size]));{$ENDIF}
+      if (total_read>0) and (Not Terminated) and (FBufferedNetTcpIpClient.Connected) and (Assigned(FBufferedNetTcpIpClient.FOnReceivedData)) then begin
+        FBufferedNetTcpIpClient.DoReceivedData;
+      end;
     end else begin
     end else begin
       if FBufferedNetTcpIpClient.SocketError<>0 then FBufferedNetTcpIpClient.Disconnect;
       if FBufferedNetTcpIpClient.SocketError<>0 then FBufferedNetTcpIpClient.Disconnect;
     end;
     end;
@@ -647,7 +653,7 @@ var SendBuffStream : TStream;
       FBufferedNetTcpIpClient.FCritical.Release;
       FBufferedNetTcpIpClient.FCritical.Release;
     End;
     End;
     if (SendBuffStream.Size>0) then begin
     if (SendBuffStream.Size>0) then begin
-      SendBuffStream.Position := 0;
+       SendBuffStream.Position := 0;
       FBufferedNetTcpIpClient.SendStream(SendBuffStream);
       FBufferedNetTcpIpClient.SendStream(SendBuffStream);
       {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Sent %d bytes',[SendBuffStream.Size]));{$ENDIF}
       {$IFDEF HIGHLOG}TLog.NewLog(ltdebug,ClassName,Format('Sent %d bytes',[SendBuffStream.Size]));{$ENDIF}
       SendBuffStream.Size := 0;
       SendBuffStream.Size := 0;
@@ -683,6 +689,7 @@ end;
 constructor TBufferedNetTcpIpClient.Create(AOwner: TComponent);
 constructor TBufferedNetTcpIpClient.Create(AOwner: TComponent);
 begin
 begin
   inherited;
   inherited;
+  FOnReceivedData := Nil;
   FLastReadTC := TPlatform.GetTickCount;
   FLastReadTC := TPlatform.GetTickCount;
   FCritical := TPCCriticalSection.Create('TBufferedNetTcpIpClient_Critical');
   FCritical := TPCCriticalSection.Create('TBufferedNetTcpIpClient_Critical');
   FSendBuffer := TMemoryStream.Create;
   FSendBuffer := TMemoryStream.Create;
@@ -701,6 +708,11 @@ begin
   inherited;
   inherited;
 end;
 end;
 
 
+procedure TBufferedNetTcpIpClient.DoReceivedData;
+begin
+  if Assigned(FOnReceivedData) then FOnReceivedData(Self);
+end;
+
 procedure TBufferedNetTcpIpClient.DoWaitForData(WaitMilliseconds: Integer; var HasData: Boolean);
 procedure TBufferedNetTcpIpClient.DoWaitForData(WaitMilliseconds: Integer; var HasData: Boolean);
 begin
 begin
   FCritical.Acquire;
   FCritical.Acquire;