Beispiel #1
0
 public async Task OnCommentaryActionAsync(CommentaryNotification info)
 {
     _commentaryActionProducer.Produce(TOPIC, new Message <Null, CommentaryNotification>()
     {
         Value = info
     });
 }
Beispiel #2
0
        public async Task OnCommentaryActionAsync(CommentaryNotification info)
        {
            var currentDayStatistic = await _dbAccess.GetBlogDayStatisticAsync(DateTime.UtcNow.Date);

            var countDelta = info.Action switch
            {
                CommentaryAction.CREATED => 1,
                CommentaryAction.DELETED => - 1,
                _ => throw new NotSupportedException()
            };

            currentDayStatistic.CommentariesCount += countDelta;

#warning save changes should not be here
            await _db.SaveChangesAsync();
        }
Beispiel #3
0
        async Task dispatcherLoopAsync()
        {
            await ThreadingUtils.ContinueAtDedicatedThread();

            while (true)
            {
                try
                {
                    var message = _consumer.Consume();
                    var scope   = _scopeBuilder
                                  .CreateScope();
                    var controller = scope.ServiceProvider
                                     .GetRequiredService <IStatisticServiceAPI>();
                    var parameter = message.Value;
                    var handler   = getHandler();
                    executeAsync();

                    /////////////////////////////////////////////

                    Func <Task> getHandler()
                    {
                        return(message.Value switch
                        {
                            CommentaryNotification cn => () => controller.OnCommentaryActionAsync(cn),
                            PostNotification pn => () => controller.OnPostActionAsync(pn),
                            SeenNotification sn => () => controller.OnSeenAsync(sn),
                            UserNotification un => () => controller.OnUserActionAsync(un),
                            _ => throw new NotSupportedException()
                        });
                    }

                    async void executeAsync()
                    {
                        using (scope)
                        {
                            await ThreadingUtils.ContinueAtThreadPull();

                            await handler();

                            _logger.LogInformation($"Consumed message '{message.Value}' at: '{message.TopicPartitionOffset}'.");
                        }
                    }
                }