public IEventReaction Generate( EventWrapper eventWrapper) { if (eventWrapper.Event == null) { throw new InvalidOperationException( "EventWrapper does not hold any callback event"); } return(eventWrapper.Event switch { AppMentionEvent _ => _appMentionEventReactionFactory.Create( eventWrapper), _ => _noopEventReactionFactory.Create(eventWrapper), });
public async Task ReactAsync(EventBase @event, CancellationToken cancellationToken) { var context = @event.GetContext(); var reactions = fFactory.Create(@event).ToArray(); if (reactions.Length == 0) { fLogger.LogInformation(context, $"No reaction for event '{@event.GetType()}'"); return; } // TODO: Paralelized reacting foreach (var reaction in reactions) { await reaction.ReactAsync(@event, cancellationToken); } }