public override Task OnConnectedAsync(HubConnectionContext connection) { var feature = new RedisFeature(); connection.Features.Set <IRedisFeature>(feature); var redisSubscriptions = feature.Subscriptions; var connectionTask = Task.CompletedTask; var userTask = Task.CompletedTask; _connections.Add(connection); var connectionChannel = _channelNamePrefix + "." + connection.ConnectionId; redisSubscriptions.Add(connectionChannel); var previousConnectionTask = Task.CompletedTask; _logger.LogInformation("Subscribing to connection channel: {channel}", connectionChannel); connectionTask = _bus.SubscribeAsync(connectionChannel, async(c, data) => { await previousConnectionTask; var message = DeserializeMessage <HubMessage>(data); previousConnectionTask = WriteAsync(connection, message); }); if (connection.User.Identity.IsAuthenticated) { var userChannel = _channelNamePrefix + ".user." + connection.User.Identity.Name; redisSubscriptions.Add(userChannel); var previousUserTask = Task.CompletedTask; // TODO: Look at optimizing (looping over connections checking for Name) userTask = _bus.SubscribeAsync(userChannel, async(c, data) => { await previousUserTask; var message = DeserializeMessage <HubMessage>(data); previousUserTask = WriteAsync(connection, message); }); } return(Task.WhenAll(connectionTask, userTask)); }
public override Task OnConnectedAsync(HubConnectionContext connection) { var feature = new RedisFeature(); connection.Features.Set <IRedisFeature>(feature); var redisSubscriptions = feature.Subscriptions; var connectionTask = Task.CompletedTask; var userTask = Task.CompletedTask; _connections.Add(connection); connectionTask = SubscribeToConnection(connection, redisSubscriptions); if (!string.IsNullOrEmpty(connection.UserIdentifier)) { userTask = SubscribeToUser(connection, redisSubscriptions); } return(Task.WhenAll(connectionTask, userTask)); }
/// <inheritdoc /> public override async Task OnConnectedAsync(HubConnectionContext connection) { await EnsureRedisServerConnection(); var feature = new RedisFeature(); connection.Features.Set <IRedisFeature>(feature); var userTask = Task.CompletedTask; _connections.Add(connection); var connectionTask = SubscribeToConnection(connection); if (!string.IsNullOrEmpty(connection.UserIdentifier)) { userTask = SubscribeToUser(connection); } await Task.WhenAll(connectionTask, userTask); }