www.pudn.com > indyprelim.zip > IdTCPStream.pas


{ 
  $Project$ 
  $Workfile$ 
  $Revision$ 
  $DateUTC$ 
  $Id$ 
 
  This file is part of the Indy (Internet Direct) project, and is offered 
  under the dual-licensing agreement described on the Indy website. 
  (http://www.indyproject.org/) 
 
  Copyright: 
   (c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved. 
} 
{ 
  $Log$ 
} 
{ 
  Rev 1.13    27.08.2004 21:58:22  Andreas Hausladen 
  Speed optimization ("const" for string parameters) 
 
  Rev 1.12    29/05/2004 21:17:48  CCostelloe 
  ReadLnSplit added, needed for binary attachments 
 
  Rev 1.11    28/05/2004 20:30:12  CCostelloe 
  Bug fix 
 
  Rev 1.10    2004.05.21 8:22:16 PM  czhower 
  Added ReadLn 
 
  Rev 1.9    2004.05.20 1:40:00 PM  czhower 
  Last of the IdStream updates 
 
  Rev 1.8    2004.03.07 11:48:46 AM  czhower 
  Flushbuffer fix + other minor ones found 
 
  Rev 1.7    2004.02.03 4:16:58 PM  czhower 
  For unit name changes. 
 
  Rev 1.6    5/12/2003 9:17:58 AM  GGrieve 
  remove dead code 
 
  Rev 1.5    5/12/2003 12:32:14 AM  GGrieve 
  Refactor to work under DotNet 
 
  Rev 1.4    10/10/2003 11:04:24 PM  BGooijen 
  DotNet 
 
  Rev 1.3    9/10/2003 1:50:50 PM  SGrobety 
  DotNet 
 
  Rev 1.2    2003.10.01 11:16:38 AM  czhower 
  .Net 
 
  Rev 1.1    2003.10.01 1:37:36 AM  czhower 
  .Net 
 
  Rev 1.0    11/13/2002 09:01:04 AM  JPMugaas 
} 
 
unit IdTCPStream; 
 
 
 
interface 
{$I IdCompilerDefines.inc} 
//TODO: This should be renamed to IdStreamTCP for consistency, and class too 
 
uses 
  IdGlobal, IdTCPConnection, IdObjs; 
 
type 
  TIdTCPStream = class(TIdStream) 
  protected 
    FConnection: TIdTCPConnection; 
    {$IFDEF DotNetDistro} 
    function GetPosition: Int64; override; 
    function GetSize: Int64; override; 
    {$ENDIF} 
    {$IFDEF DOTNET} 
    procedure SetSize(NewSize: Int64); override; 
    {$ELSE} 
    {$IFDEF VCL6ORABOVE} 
    procedure SetSize(const NewSize: Int64); override; 
    {$ELSE} 
    procedure SetSize(NewSize: Longint); override; 
    {$ENDIF} 
    {$ENDIF} 
  public 
    constructor Create(AConnection: TIdTCPConnection); reintroduce; 
    {$IFDEF DOTNET} 
    function Read(var ABuffer: array of Byte; AOffset, ACount: Longint): Longint; overload; override; 
    function Write(const ABuffer: array of Byte; AOffset, ACount: Longint): Longint; overload; override; 
    {$ELSE} 
    function Read(var Buffer; Count: Longint): Longint;  override; 
    function Write(const Buffer; Count: Longint): Longint;  override; 
    {$ENDIF} 
    {$IFDEF VCL6ORABOVE} 
    function Seek(const Offset: Int64; Origin: TIdSeekOrigin): Int64; overload; override; 
    {$ELSE} 
    function Seek(Offset: Longint; Origin: Word): Longint; override; 
    {$ENDIF} 
    property Connection: TIdTCPConnection read FConnection; 
  end; 
 
implementation 
 
{$IFNDEF DOTNET} 
uses SysUtils; 
{$ENDIF} 
 
constructor TIdTCPStream.Create(AConnection: TIdTCPConnection); 
begin 
  inherited Create; 
  FConnection := AConnection; 
end; 
 
{$IFDEF DotNetDistro} 
function TIdTCPStream.GetSize: Int64; 
begin 
  Result := 0; 
end; 
 
function TIdTCPStream.GetPosition: Int64; 
begin 
  Result := -1; 
end; 
{$ENDIF} 
 
{$IFDEF DOTNET} 
function TIdTCPStream.Read(var ABuffer: array of Byte; AOffset, 
  ACount: Longint): Longint; 
var 
  TempBuff: TIdBytes; 
begin 
  TempBuff := ABuffer; 
  Connection.IOHandler.ReadBytes(TempBuff, ACount, false); 
  ABuffer := TempBuff; 
  Result := ACount; 
end; 
{$ELSE} 
function TIdTCPStream.Read(var Buffer; Count: Longint): Longint; 
var 
  TempBuff: TIdBytes; 
begin 
  SetLength(TempBuff,Count); 
 
  Connection.IOHandler.ReadBytes(TempBuff, Count, false); 
  Move(TempBuff,Buffer,Count); 
  Result := Count; 
end; 
{$ENDIF} 
 
{$IFDEF VCL6ORABOVE} 
function TIdTCPStream.Seek(const Offset: Int64; Origin: TIdSeekOrigin): Int64; 
{$ELSE} 
function TIdTCPStream.Seek(Offset: Longint; Origin: Word): Longint; 
{$ENDIF} 
begin 
  Result := 0; 
end; 
 
{$IFDEF DOTNET} 
procedure TIdTCPStream.SetSize(NewSize: Int64); 
{$ELSE} 
{$IFDEF VCL6ORABOVE} 
procedure TIdTCPStream.SetSize(const NewSize: Int64); 
{$ELSE} 
procedure TIdTCPStream.SetSize(NewSize: Longint); 
{$ENDIF} 
{$ENDIF} 
begin 
// 
end; 
 
{$IFDEF DOTNET} 
function TIdTCPStream.Write(const ABuffer: array of Byte; AOffset, ACount: Longint) : Longint; 
begin 
  if AOffset > 0 then 
    ToDo; 
 
  Connection.IOHandler.Write(ToBytes(ABuffer, ACount)); 
  Result := ACount - AOffset; 
end; 
{$ELSE} 
function TIdTCPStream.Write(const Buffer; Count: Longint): Longint; 
begin 
  Connection.IOHandler.Write(RawToBytes(Buffer,Count)); 
  Result := Count; 
end; 
{$ENDIF} 
 
end.