using System.Collections.Concurrent; using Govor.Application.Interfaces; namespace Govor.API.Hubs.Infrastructure; public class ConnectionStore : IConnectionStore { private readonly ConcurrentDictionary> _connections = new(); public void AddConnection(Guid userId, string connectionId) { var conns = _connections.GetOrAdd(userId, _ => new HashSet()); lock (conns) conns.Add(connectionId); } public void RemoveConnection(Guid userId, string connectionId) { if (_connections.TryGetValue(userId, out var conns)) { lock (conns) { conns.Remove(connectionId); if (!conns.Any()) _connections.TryRemove(userId, out _); } } } public IEnumerable GetConnections(Guid userId) { return _connections.TryGetValue(userId, out var conns) ? conns.ToList() : Enumerable.Empty(); } }