|
@@ -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;
|