141 lines
3.5 KiB
Plaintext
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.
|
|
|
|
|