Mark van Renswoude
a9cf1b75f6
Fixed: FS#5 - Reconnecting can cause pipe to be busy Fixed: FS#6 - Process hangs when closing after named pipe client has disconnected Fixed: themed drawing of toolbar in MonitorForm Fixed: various memory leaks Changed: NamedPipeClient test application uses MonitorForm observer to display log
82 lines
2.0 KiB
ObjectPascal
82 lines
2.0 KiB
ObjectPascal
unit X2Log.Details.Registry;
|
|
|
|
interface
|
|
uses
|
|
System.Generics.Collections,
|
|
|
|
X2Log.Intf;
|
|
|
|
|
|
type
|
|
TSerializerDictionary = TDictionary<TGUID, IX2LogDetailsSerializer>;
|
|
|
|
TX2LogDetailsRegistry = class(TObject)
|
|
private
|
|
class var FSerializers: TSerializerDictionary;
|
|
protected
|
|
class function Serializers: TSerializerDictionary;
|
|
|
|
class procedure CleanupSerializers;
|
|
public
|
|
class procedure Register(AIID: TGUID; ASerializer: IX2LogDetailsSerializer);
|
|
class procedure Unregister(AIID: TGUID);
|
|
|
|
class function GetSerializer(ASerializerIID: TGUID; out ASerializer: IX2LogDetailsSerializer): Boolean; overload;
|
|
class function GetSerializer(ADetails: IX2LogDetails; out ASerializer: IX2LogDetailsSerializer): Boolean; overload;
|
|
end;
|
|
|
|
|
|
implementation
|
|
uses
|
|
System.SysUtils,
|
|
System.Types;
|
|
|
|
|
|
{ TX2LogDetailsRegistry }
|
|
class procedure TX2LogDetailsRegistry.Register(AIID: TGUID; ASerializer: IX2LogDetailsSerializer);
|
|
begin
|
|
Serializers.Add(AIID, ASerializer);
|
|
end;
|
|
|
|
|
|
class function TX2LogDetailsRegistry.GetSerializer(ADetails: IX2LogDetails; out ASerializer: IX2LogDetailsSerializer): Boolean;
|
|
begin
|
|
Result := Assigned(ADetails) and
|
|
(ADetails.SerializerIID <> GUID_NULL) and
|
|
GetSerializer(ADetails.SerializerIID, ASerializer);
|
|
end;
|
|
|
|
|
|
class procedure TX2LogDetailsRegistry.Unregister(AIID: TGUID);
|
|
begin
|
|
Serializers.Remove(AIID);
|
|
end;
|
|
|
|
|
|
class function TX2LogDetailsRegistry.GetSerializer(ASerializerIID: TGUID; out ASerializer: IX2LogDetailsSerializer): Boolean;
|
|
begin
|
|
Result := Serializers.TryGetValue(ASerializerIID, ASerializer);
|
|
end;
|
|
|
|
|
|
class function TX2LogDetailsRegistry.Serializers: TSerializerDictionary;
|
|
begin
|
|
if not Assigned(FSerializers) then
|
|
FSerializers := TSerializerDictionary.Create;
|
|
|
|
Result := FSerializers;
|
|
end;
|
|
|
|
|
|
class procedure TX2LogDetailsRegistry.CleanupSerializers;
|
|
begin
|
|
FreeAndNil(FSerializers);
|
|
end;
|
|
|
|
|
|
initialization
|
|
finalization
|
|
TX2LogDetailsRegistry.CleanupSerializers;
|
|
|
|
end.
|