DelphiEventBus
1.0.0
Implémentation du modèle de bus d'événements pour Delphi XE
EventBus est conçu pour fournir une interaction entre les différents composants, sans augmenter la connectivité.
// event class declaration
Type
TFooEventObject = class (TbtkEventObject)
// ..........................
public
const sFooFilterName = ' FooFilter ' ;
constructor Create(ATopic: string; AFooFliter: string);
[EventFilter(sFooFilterName)] // filter parameter declaration
function FooFilter : string;
// ..........................
end ;
// preparation of the listener
TFooEventListener = class
// ..........................
public
[EventHandler] // handler declaration
procedure FooHandler (AFooEvent: TFooEventObject);
[EventHook] // hook declaration
procedure FooHook (AEventObject: TFooEventObject);
// ..........................
end ;
EventBus := TbtkEventBus.GetEventBus( ' FooEventBus ' );
ListenerInfo := EventBus.Register(FooEventListener);
// setting filter parameters
ListenerInfo.HandlerFilters[TFooEventObject][TFooEventObject.sEventFilterTopicName]. Value := ' TopicValue ' ;
ListenerInfo.HandlerFilters[TFooEventObject][TFooEventObject.sFooFilterName]. Value := ' FooFilterValue ' ;
// creating and sending events
EventBus.Send(TFooEventObject.Create( ' TopicValue ' , ' FooFilterValue ' ));
// listener unregistration
EventBus.Unregister(FooListener); program EventHookExample;
{ $APPTYPE CONSOLE }
uses
System.SysUtils,
btkEventBus;
type
TFooEventListener = class
public
[EventHook] // hook declaration
procedure FooHook (EventObject: TbtkEventObject);
end ;
{ TFooEventListener }
// hook implementation
procedure TFooEventListener.FooHook (EventObject: TbtkEventObject);
begin
Writeln(Format( ' ====== ' # 13 # 10 ' Event with topic "%s" sended ' , [EventObject.Topic]));
end ;
const
ebFoo = ' FooEventBus ' ;
var
FooEventListener: TFooEventListener;
FooTopicName: string;
begin
// register class for eventbus with name 'FooEventBus'
RegisterEventBusClass(TbtkEventBus, ebFoo);
FooEventListener := TFooEventListener.Create;
try
// register listener
EventBus(ebFoo).Register(FooEventListener);
Write( ' Write topic: ' );
ReadLn(FooTopicName);
// create and send event
EventBus(ebFoo).Send(TbtkEventObject.Create(FooTopicName));
finally
FooEventListener.Free;
end ;
Readln;
end . program EventHookExample;
{ $APPTYPE CONSOLE }
uses
System.SysUtils,
btkEventBus;
type
TFooEventListener = class
public
[EventHandler] // handler declaration
procedure FooHandler (EventObject: TbtkEventObject);
end ;
{ TFooEventListener }
// handler implementation
procedure TFooEventListener.FooHandler (EventObject: TbtkEventObject);
begin
Writeln(Format( ' Event with topic "%s" sended ' , [EventObject.Topic]));
end ;
const
FooTopicName = ' FooTopic ' ;
var
FooEventListener: TFooEventListener;
FooListenerInfo: TbtkListenerInfo;
begin
// register class for eventbus with empty name
RegisterEventBusClass(TbtkEventBus);
FooEventListener := TFooEventListener.Create;
try
// register listener and get listner info
FooListenerInfo := EventBus.Register(FooEventListener);
// set topicfilter for handler
FooListenerInfo.HandlerFilters.Items[TbtkEventObject].Filters[TbtkEventObject.sEventFilterTopicName]. Value := FooTopicName;
// create and send event
EventBus.Send(TbtkEventObject.Create(FooTopicName));
finally
FooEventListener.Free;
end ;
Readln;
end .