unit UnitReadThread;

interface

uses
  Classes, SysUtils, Graphics;

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

implementation

uses UnitfrmSockets;

{ TReadThread }

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

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

end.