restemplate/indy/Core/IdTCPStream.pas

141 lines
3.5 KiB
Plaintext

{
$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
Classes,
IdGlobal, IdTCPConnection;
type
TIdTCPStream = class(TIdBaseStream)
protected
FConnection: TIdTCPConnection;
FWriteThreshold: Integer;
FWriteBuffering: Boolean;
function IdRead(var VBuffer: TIdBytes; AOffset, ACount: Longint): Longint; override;
function IdWrite(const ABuffer: TIdBytes; AOffset, ACount: Longint): Longint; override;
function IdSeek(const AOffset: Int64; AOrigin: TSeekOrigin): Int64; override;
procedure IdSetSize(ASize: Int64); override;
public
constructor Create(AConnection: TIdTCPConnection; const AWriteThreshold: Integer = 0); reintroduce;
destructor Destroy; override;
property Connection: TIdTCPConnection read FConnection;
end;
implementation
uses
IdException,
SysUtils;
constructor TIdTCPStream.Create(AConnection: TIdTCPConnection; const AWriteThreshold: Integer = 0);
begin
inherited Create;
FConnection := AConnection;
FWriteThreshold := AWriteThreshold;
end;
destructor TIdTCPStream.Destroy;
begin
if FWriteBuffering then begin
Connection.IOHandler.WriteBufferClose;
end;
inherited Destroy;
end;
function TIdTCPStream.IdRead(var VBuffer: TIdBytes; AOffset, ACount: Longint): Longint;
begin
if AOffset <> 0 then begin
ToDo('IdRead() method of TIdTCPStream class does not support seeking'); {do not localized}
end;
Connection.IOHandler.ReadBytes(VBuffer, ACount, False);
Result := ACount;
end;
function TIdTCPStream.IdSeek(const AOffset: Int64; AOrigin: TSeekOrigin): Int64;
begin
Result := 0;
end;
procedure TIdTCPStream.IdSetSize(ASize: Int64);
begin
//
end;
function TIdTCPStream.IdWrite(const ABuffer: TIdBytes; AOffset, ACount: Longint): Longint;
begin
if (not FWriteBuffering) and (FWriteThreshold > 0) and (not Connection.IOHandler.WriteBufferingActive) then begin
Connection.IOHandler.WriteBufferOpen(FWriteThreshold);
FWriteBuffering := True;
end;
Connection.IOHandler.Write(ABuffer, ACount, AOffset);
Result := ACount;
end;
end.