示例#1
0
        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);
            }
        }
示例#2
0
        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();
                }
            });
        }