restemplate/indy/Protocols/IdMessageCollection.pas

126 lines
3.0 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.2 2004.10.26 2:19:58 PM czhower
Resolved alias conflict.
Rev 1.1 14/07/2004 21:37:26 CCostelloe
Changed Get/SetMessage to Get/SetIdMessage to avoid conflict under C++ with
Windows' GetMessage
Rev 1.0 11/13/2002 07:57:28 AM JPMugaas
2000-APR-14 Peter Mee: Converted to Indy.
2001-MAY-03 Idan Cohen: Added Create and Destroy of TIdMessage.
}
unit IdMessageCollection;
{
TIdMessageCollection: Contains a collection of IdMessages.
Originally by Peter Mee.
}
interface
{$i IdCompilerDefines.inc}
uses
Classes,
IdMessage;
type
TIdMessageItems = class of TIdMessageItem;
TIdMessageItem = class(TCollectionItem)
protected
FAttempt: Integer;
FMsg: TIdMessage;
FQueued: Boolean;
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
//
property Attempt: Integer read FAttempt write FAttempt;
property Msg: TIdMessage read FMsg;
property Queued: Boolean read FQueued write FQueued;
end;
TIdMessageCollection = class(TCollection)
private
function GetIdMessage(index: Integer): TIdMessage;
procedure SetIdMessage(index: Integer; const Value: TIdMessage);
public
constructor Create; reintroduce;
function Add: TIdMessageItem;
property Messages[index: Integer]: TIdMessage read GetIdMessage write SetIdMessage; Default;
end;
implementation
uses
IdGlobal, SysUtils;
{ TIdMessageItem }
constructor TIdMessageItem.Create(Collection: TCollection);
begin
inherited Create(Collection);
FMsg := TIdMessage.Create(nil);
end;
destructor TIdMessageItem.Destroy;
begin
FreeAndNil(FMsg);
inherited Destroy;
end;
{ TIdMessageCollection }
constructor TIdMessageCollection.Create;
begin
inherited Create(TIdMessageItem);
end;
function TIdMessageCollection.Add;
begin
Result := TIdMessageItem(inherited Add);
end;
function TIdMessageCollection.GetIdMessage(index: Integer): TIdMessage;
begin
Result := TIdMessageItem(Items[index]).Msg;
end;
procedure TIdMessageCollection.SetIdMessage(index: Integer; const Value: TIdMessage);
begin
//I think it should be freed before the new value is assigned or else the
//pointer will be lost.
// RLebeau 6/3/2010: this is taking ownership of the input TIdMessage
// pointer! We should probably be calling Assign() instead, and let
// the caller manage its TIdMessage object separately. Or else make
// the Messages[] property read-only instead...
TIdMessageItem(Items[index]).FMsg.Free;
TIdMessageItem(Items[index]).FMsg := Value;
end;
end.