// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using Microsoft.AspNetCore.Connections; namespace SignalRSamples { internal class ConnectionList : IReadOnlyCollection { private readonly ConcurrentDictionary _connections = new ConcurrentDictionary(StringComparer.Ordinal); public ConnectionContext this[string connectionId] { get { if (_connections.TryGetValue(connectionId, out var connection)) { return connection; } return null; } } public int Count => _connections.Count; public void Add(ConnectionContext connection) { _connections.TryAdd(connection.ConnectionId, connection); } public void Remove(ConnectionContext connection) { _connections.TryRemove(connection.ConnectionId, out var dummy); } public IEnumerator GetEnumerator() { foreach (var item in _connections) { yield return item.Value; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }