www.pudn.com > indyprelim.zip > IdLogBase.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.5    2004.02.03 4:17:14 PM  czhower 
  For unit name changes. 
 
  Rev 1.4    2004.01.20 10:03:28 PM  czhower 
  InitComponent 
 
  Rev 1.3    2003.10.17 6:15:54 PM  czhower 
  Upgrades 
 
  Rev 1.2    2003.10.14 1:27:08 PM  czhower 
  Uupdates + Intercept support 
 
  Rev 1.1    6/16/2003 10:39:02 AM  EHill 
  Done: Expose Open/Close as public in TIdLogBase 
 
  Rev 1.0    11/13/2002 07:55:58 AM  JPMugaas 
} 
 
unit IdLogBase; 
 
interface 
{$I IdCompilerDefines.inc} 
//Put FPC into Delphi mode 
uses 
  IdIntercept, IdGlobal,  IdObjs; 
 
type 
  TIdLogBase = class(TIdConnectionIntercept) 
  protected 
    FActive: Boolean; 
    FLogTime: Boolean; 
    FReplaceCRLF: Boolean; 
    FStreamedActive: Boolean; 
    // 
    procedure InitComponent; override; 
    procedure LogStatus(AText: string); virtual; abstract; 
    procedure LogReceivedData(AText: string; AData: string); virtual; abstract; 
    procedure LogSentData(AText: string; AData: string); virtual; abstract; 
    procedure SetActive(AValue: Boolean); virtual; 
    procedure Loaded; override; 
    function ReplaceCR(const AString : String) : String; 
  public 
    procedure Open; virtual; 
    procedure Close; virtual; 
    procedure Connect(AConnection: TIdNativeComponent); override; 
    destructor Destroy; override; 
    procedure Disconnect; override; 
    procedure Receive(var ABuffer: TIdBytes); override; 
    procedure Send(var ABuffer: TIdBytes); override; 
  published 
    property Active: Boolean read FActive write SetActive default False; 
    property LogTime: Boolean read FLogTime write FLogTime default True; 
    property ReplaceCRLF: Boolean read FReplaceCRLF write FReplaceCRLF default true; 
  end; 
 
implementation 
 
uses 
  IdResourceStringsCore, IdSys; 
 
const 
  LOldStr : array [0..2] of string = 
    ( EOL,  CR, 
      LF); 
  LNewStr : array [0..2] of string = 
     (RSLogEOL, 
     RSLogCR, 
     RSLogLF); 
{ TIdLogBase } 
 
procedure TIdLogBase.Close; 
begin 
end; 
 
procedure TIdLogBase.Connect(AConnection: TIdNativeComponent); 
begin 
  if FActive then begin 
    inherited Connect(AConnection); 
    LogStatus(RSLogConnected); 
  end; 
end; 
 
destructor TIdLogBase.Destroy; 
begin 
  Active := False; 
  inherited Destroy; 
end; 
 
procedure TIdLogBase.Disconnect; 
begin 
  if FActive then begin 
    LogStatus(RSLogDisconnected); 
    inherited Disconnect; 
  end; 
end; 
 
procedure TIdLogBase.InitComponent; 
begin 
  inherited InitComponent; 
  FLogTime := True; 
  ReplaceCRLF := True; 
end; 
 
procedure TIdLogBase.Loaded; 
begin 
  inherited Loaded; 
  Active := FStreamedActive; 
end; 
 
procedure TIdLogBase.Open; 
begin 
end; 
 
procedure TIdLogBase.Receive(var ABuffer: TIdBytes); 
var 
  s: string; 
  LMsg: string; 
begin 
  if FActive then begin 
    inherited Receive(ABuffer); 
    LMsg := ''; 
    if LogTime then begin 
      LMsg := Sys.DateTimeToStr(Sys.Now); 
    end; 
    s := BytesToString(ABuffer); 
    if FReplaceCRLF then begin 
      s :=  ReplaceCR(S); 
    end; 
    LogReceivedData(LMsg, s); 
  end; 
end; 
 
function TIdLogBase.ReplaceCR(const AString: String): String; 
begin 
  Result := Sys.StringReplace(AString,LOldStr,LNewStr); 
end; 
 
procedure TIdLogBase.Send(var ABuffer: TIdBytes); 
var 
  s: string; 
  LMsg: string; 
begin 
  if FActive then begin 
    inherited Send(ABuffer); 
    LMsg := ''; 
    if LogTime then begin 
      LMsg := Sys.DateTimeToStr(Sys.Now); 
    end; 
    s := BytesToString(ABuffer); 
    if FReplaceCRLF then begin 
      s := ReplaceCR(S); 
    end; 
    LogSentData(LMsg, s); 
  end; 
end; 
 
procedure TIdLogBase.SetActive(AValue: Boolean); 
begin 
  if IsLoading then 
    FStreamedActive := AValue 
  else 
    if FActive <> AValue then 
    begin 
      FActive := AValue; 
      if FActive then 
        Open 
      else 
        Close; 
    end; 
end; 
 
end.