unit UnitReadThread; // from AMXX-Edit v2

interface

uses
  Classes, SysUtils, Graphics;

type
  TReadThread = class(TThread)
  public
    ReadTCP: Boolean;
  protected
    Read: String;
    procedure Execute; override;
    procedure AddRead;
  end;

implementation

uses UnitfrmSocketsTerminal;

{ TReadThread }

procedure TReadThread.AddRead;
begin
  frmSocketsTerminal.OnRead(Read);
end;

procedure TReadThread.Execute;
begin
  if ReadTCP then begin
    frmSocketsTerminal.IdTCPClient.ReadTimeout := 50;
    repeat
      try
        Read := frmSocketsTerminal.IdTCPClient.ReadLn;
        Synchronize(AddRead);
      except
        // nothing
      end;
    until (Terminated) or (not frmSocketsTerminal.IdTCPClient.Connected);
  end
  else begin
    frmSocketsTerminal.IdUDPClient.ReceiveTimeout := 50;
    repeat
      try
        Read := frmSocketsTerminal.IdUDPClient.ReceiveString;
        if Read <> '' then // if ReadTimeout then Read = ''
          Synchronize(AddRead);
      except
        // nothing
      end;
    until (Terminated) or (not frmSocketsTerminal.IdUDPClient.Active);
  end;
  Free;
end;

end.