
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3891 8e941d3f-bd1b-0410-a28a-d453659cc2b4
110 lines
3.2 KiB
ObjectPascal
110 lines
3.2 KiB
ObjectPascal
{
|
|
This file is part of the Web Service Toolkit
|
|
Copyright (c) 2006, 2007, 2008 by Inoussa OUEDRAOGO
|
|
|
|
This file is provide under modified LGPL licence
|
|
( the files COPYING.modifiedLGPL and COPYING.LGPL).
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
}
|
|
{$INCLUDE wst_global.inc}
|
|
unit logger_extension;
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, base_service_intf, server_service_intf;
|
|
|
|
type
|
|
|
|
{ TLoggerServiceExtension }
|
|
|
|
TLoggerServiceExtension = class(TSimpleFactoryItem,IServiceExtension)
|
|
private
|
|
FPropertyManager : IPropertyManager;
|
|
protected
|
|
procedure TraceMessage(const AMsg : string);virtual;
|
|
protected
|
|
procedure ProcessMessage(
|
|
const AMessageStage : TMessageStage;
|
|
ACallContext : ICallContext;
|
|
AMsgData : IInterface
|
|
{ The "AMsgData" parameter actual type depends on the message state
|
|
on correspond to :
|
|
- IRequestBuffer on "msBeforeDeserialize" and "msAfterSerialize"
|
|
- IFormatterResponse on "msAfterDeserialize", "msBeforeSerialize"
|
|
}
|
|
);
|
|
function GetPropertyManager():IPropertyManager;
|
|
end;
|
|
|
|
implementation
|
|
uses TypInfo;
|
|
|
|
{ TLoggerServiceExtension }
|
|
|
|
procedure TLoggerServiceExtension.TraceMessage(const AMsg: string);
|
|
begin
|
|
if IsConsole then
|
|
WriteLn(AMsg);
|
|
end;
|
|
|
|
procedure TLoggerServiceExtension.ProcessMessage(
|
|
const AMessageStage: TMessageStage;
|
|
ACallContext: ICallContext;
|
|
AMsgData: IInterface
|
|
);
|
|
var
|
|
s : string;
|
|
rqb : IRequestBuffer;
|
|
frmtr : IFormatterResponse;
|
|
rb : IRequestBuffer;
|
|
strm : TStream;
|
|
oldPos : Int64;
|
|
locStream : TStringStream;
|
|
begin
|
|
s := GetEnumName(TypeInfo(TMessageStage),Ord(AMessageStage));
|
|
case AMessageStage of
|
|
msBeforeDeserialize, msAfterSerialize :
|
|
begin
|
|
rqb := AMsgData as IRequestBuffer;
|
|
s := Format('Called service : "%s"; Processing stage : "%s"',[rqb.GetTargetService(),s]);
|
|
rb := AMsgData as IRequestBuffer;
|
|
if ( AMessageStage = msBeforeDeserialize ) then
|
|
strm := rb.GetContent()
|
|
else
|
|
strm := rb.GetResponse();
|
|
oldPos := strm.Position;
|
|
locStream := TStringStream.Create('');
|
|
try
|
|
locStream.CopyFrom(strm,0);
|
|
s := Format('%s%s%s',[s,sLineBreak,locStream.DataString]);
|
|
finally
|
|
strm.Position := oldPos;
|
|
locStream.Free();
|
|
end;
|
|
end;
|
|
msAfterDeserialize, msBeforeSerialize :
|
|
begin
|
|
frmtr := AMsgData as IFormatterResponse;
|
|
s := Format('Called service : "%s"; Target Operation = "%s"; Processing stage : "%s"',[frmtr.GetCallTarget(),frmtr.GetCallProcedureName(),s]);
|
|
end;
|
|
end;
|
|
TraceMessage(Format('%sTimeStamp : %s; %s',[sLineBreak,DateTimeToStr(Now()),s]));
|
|
end;
|
|
|
|
function TLoggerServiceExtension.GetPropertyManager: IPropertyManager;
|
|
begin
|
|
if ( FPropertyManager = nil ) then
|
|
FPropertyManager := TStoredPropertyManager.Create();
|
|
Result := FPropertyManager;
|
|
end;
|
|
|
|
initialization
|
|
GetServiceExtensionRegistry().Register('TLoggerServiceExtension',TSimpleItemFactory.Create(TLoggerServiceExtension));
|
|
|
|
end.
|