public async Task Invoke(EventBytesTransport transport, ISerializer serializer, IEventTypeFinder eventTypeFinder, ILogger logger, Type eventHandlerType) { var eventType = eventTypeFinder.FindType(transport.EventTypeCode); var @event = (TEvent)serializer.Deserialize(transport.EventBytes, eventType); if (this is IPoleEventHandler <TEvent> handler) { var handleTasks = handler.EventHandle(@event); await handleTasks; logger.LogTrace("Invoke completed: {0}->{1}->{2}", eventHandlerType.FullName, nameof(handler.EventHandle), serializer.Serialize(@event)); return; } else { throw new EventHandlerImplementedNotRightException(nameof(handler.EventHandle), eventType.Name, this.GetType().FullName); } }
public async Task CompeleteAsync(CancellationToken cancellationToken = default) { await bus.Transaction.CommitAsync(); var bufferedEvents = bus.PrePublishEventBuffer.ToList(); bufferedEvents.ForEach(async @event => { var eventType = eventTypeFinder.FindType(@event.Name); var eventContentBytes = Encoding.UTF8.GetBytes(@event.Content); var bytesTransport = new EventBytesTransport(@event.Name, @event.Id, eventContentBytes); var bytes = bytesTransport.GetBytes(); var result = await eventBuffer.AddAndRun(@event); if (!result) { throw new AddEventToEventBufferException(); } }); }