Skip to content

Commit b5c48b0

Browse files
committed
Update event processor event type adding behaviour to use delegates
1 parent 0f9b66d commit b5c48b0

File tree

8 files changed

+42
-30
lines changed

8 files changed

+42
-30
lines changed

.github/workflows/cd.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66
- main
77

88
env:
9-
PACKAGE_VERSION: 6.2.1
9+
PACKAGE_VERSION: 6.3.0
1010
PACKAGE_PROJECT: https://nlib.enbiso.com
1111
PACKAGE_REPO: https://github.com/enbiso/Enbiso.NLib
1212
PACKAGE_COPYRIGHT: Copyright 2021 (c) enbiso. All rights reserved.

Enbiso.NLib.EventBus.Abstractions/IEventHandler.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ namespace Enbiso.NLib.EventBus
88
/// </summary>
99
public interface IEventHandler
1010
{
11-
Type GetEventType();
11+
string EventName { get; }
12+
Type EventType { get; }
1213
Task Handle(object @event);
1314
}
1415

@@ -19,7 +20,8 @@ public interface IEventHandler
1920
public abstract class EventHandler<TEvent>: IEventHandler where TEvent : class, IEvent
2021
{
2122
protected abstract Task Handle(TEvent @event);
22-
public Type GetEventType() => typeof(TEvent);
23+
public string EventName => typeof(TEvent).Name;
24+
public Type EventType => typeof(TEvent);
2325
public Task Handle(object @event) => Handle(@event as TEvent);
2426
}
2527
}

Enbiso.NLib.EventBus.Nats/JetStream/JetStreamEventSubscriber.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ public JetStreamEventSubscriber(IJetStreamConnection jsConnection, IOptions<Nats
2020
_eventProcessor = eventProcessor;
2121
_natsConnection = natsConnection;
2222
_options = options.Value;
23-
_eventProcessor.Setup();
2423
}
2524

2625
public void Dispose()

Enbiso.NLib.EventBus.Nats/NatsEventSubscriber.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ public NatsEventSubscriber(INatsConnection connection, IOptions<NatsOptions> opt
1616
_connection = connection;
1717
_eventProcessor = eventProcessor;
1818
_options = options.Value;
19-
_eventProcessor.Setup();
2019
}
2120

2221
public void Dispose()

Enbiso.NLib.EventBus.RabbitMq/RabbitMqBusSubscriber.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Collections.Generic;
23
using System.Threading;
34
using System.Threading.Tasks;
@@ -19,17 +20,17 @@ public RabbitMqBusSubscriber(IRabbitMqConnection connection, IEventProcessor eve
1920
{
2021
var option = optionWrap.Value;
2122
_queueName = option.Client;
22-
_exchanges = option.Exchanges?? new string[0];
23+
_exchanges = option.Exchanges?? Array.Empty<string>();
2324

2425
_connection = connection;
2526
_eventProcessor = eventProcessor;
2627

27-
_eventProcessor.Setup(eventName =>
28+
_eventProcessor.EventTypeAdded += (_, args) =>
2829
{
2930
using var channel = _connection.CreateModel();
3031
foreach (var exchange in _exchanges)
31-
channel.QueueBind(queue: _queueName, exchange: exchange, routingKey: eventName);
32-
});
32+
channel.QueueBind(queue: _queueName, exchange: exchange, routingKey: args.EventName);
33+
};
3334
}
3435

3536
private IModel CreateConsumerChannel()

Enbiso.NLib.EventBus/EventProcessor.cs

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@ namespace Enbiso.NLib.EventBus
1010
public class EventProcessor: IEventProcessor
1111
{
1212
private readonly Dictionary<string, List<IEventHandler>> _subscriptions = new();
13-
14-
private readonly IEnumerable<IEventHandler> _eventHandlers;
1513
private readonly ILogger _logger;
16-
14+
1715
public EventProcessor(IEnumerable<IEventHandler> eventHandlers, ILogger<EventProcessor> logger)
1816
{
19-
_eventHandlers = eventHandlers;
17+
foreach (var eventHandler in eventHandlers)
18+
{
19+
AddEventHandler(eventHandler);
20+
}
2021
_logger = logger;
2122
}
2223

@@ -29,7 +30,7 @@ public async Task ProcessEvent(string eventName, byte[] data)
2930
var eventHandlers = _subscriptions[eventName];
3031
foreach (var eventHandler in eventHandlers)
3132
{
32-
var eventType = eventHandler.GetEventType();
33+
var eventType = eventHandler.EventType;
3334
var @event = JsonSerializer.Deserialize(message, eventType);
3435

3536
var eventId = @event is IEvent iEvent ? iEvent.EventId : Guid.Empty;
@@ -45,23 +46,23 @@ public async Task ProcessEvent(string eventName, byte[] data)
4546
}
4647
}
4748

48-
public void Setup(Action<string> onAddSubscription)
49+
public event EventProcessorEventTypeAddedEventHandler EventTypeAdded;
50+
public void AddEventHandler(IEventHandler eventHandler)
4951
{
50-
foreach (var eventHandler in _eventHandlers)
52+
var eventName = eventHandler.EventName;
53+
if (_subscriptions.TryGetValue(eventName, out var currentHandlers))
5154
{
52-
var eventName = eventHandler.GetEventType().Name;
53-
54-
onAddSubscription?.Invoke(eventName);
55-
56-
if (_subscriptions.TryGetValue(eventName, out var currentHandlers))
57-
{
58-
currentHandlers.Add(eventHandler);
59-
_subscriptions[eventName] = currentHandlers;
60-
}
61-
else
55+
currentHandlers.Add(eventHandler);
56+
_subscriptions[eventName] = currentHandlers;
57+
}
58+
else
59+
{
60+
_subscriptions.Add(eventName, new List<IEventHandler> {eventHandler});
61+
EventTypeAdded?.Invoke(this, new EventProcessorEventTypeAddedEventArgs
6262
{
63-
_subscriptions.Add(eventName, new List<IEventHandler> {eventHandler});
64-
}
63+
EventType = eventHandler.EventType,
64+
EventName = eventName
65+
});
6566
}
6667
}
6768
}

Enbiso.NLib.EventBus/EventSubscriptionService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public EventSubscriptionService(IEnumerable<IEventSubscriber> subscribers)
1414
_subscribers = subscribers;
1515
}
1616

17-
public Task SubscribeAll(CancellationToken token) =>
17+
public Task SubscribeAll(CancellationToken token = default) =>
1818
Task.WhenAll(_subscribers.Select(s => s.Subscribe(token)));
1919
}
2020
}

Enbiso.NLib.EventBus/IEventProcessor.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ namespace Enbiso.NLib.EventBus
66
public interface IEventProcessor
77
{
88
Task ProcessEvent(string eventName, byte[] data);
9-
void Setup(Action<string> onAddSubscription = null);
9+
void AddEventHandler(IEventHandler handler);
10+
event EventProcessorEventTypeAddedEventHandler EventTypeAdded;
1011
}
12+
13+
public class EventProcessorEventTypeAddedEventArgs: EventArgs
14+
{
15+
public string EventName { get; set; }
16+
public Type EventType { get; set; }
17+
}
18+
19+
public delegate void EventProcessorEventTypeAddedEventHandler(object sender,
20+
EventProcessorEventTypeAddedEventArgs e);
1121
}

0 commit comments

Comments
 (0)