/
vshmidt
/
masstransit
Обзор
Документация
Войти
/
vshmidt
/
masstransit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/MassTransit.SignalR/Consumers/UserConsumer.cs
50 строк
1 KB
denys.kozhevnikov
Cleanup using
25 янв 2023, 22:00
25 янв 2023, 22:00
15c3b8b
Код
Авторство
О чём код?
namespace MassTransit.SignalR.Consumers { using System; using System.Collections.Generic; using System.Threading.Tasks; using Contracts; using Microsoft.AspNetCore.SignalR; using Utils; public class UserConsumer<THub> : IConsumer<User<THub>> where THub : Hub { readonly MassTransitHubLifetimeManager<THub> _hubLifetimeManager; public UserConsumer(MassTransitHubLifetimeManager<THub> hubLifetimeManager) { _hubLifetimeManager = hubLifetimeManager; } public Task Consume(ConsumeContext<User<THub>> context) { return Handle(context.Message.UserId, context.Message.Messages); } async Task Handle(string userId, IReadOnlyDictionary<string, byte[]> messages) { var message = new Lazy<SerializedHubMessage>(messages.ToSerializedHubMessage); var userStore = _hubLifetimeManager.Users[userId]; if (userStore == null || userStore.Count <= 0) return; var tasks = new List<Task>(userStore.Count); foreach (var connection in userStore) tasks.Add(connection.WriteAsync(message.Value).AsTask()); try { await Task.WhenAll(tasks); } catch (Exception e) { LogContext.Warning?.Log(e, "Failed to write message"); } } } }