aspnetcore/src/Microsoft.AspNetCore.Signal.../HubConnectionStore.cs

61 lines
1.8 KiB
C#

// 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.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
namespace Microsoft.AspNetCore.SignalR
{
public class HubConnectionStore
{
private readonly ConcurrentDictionary<string, HubConnectionContext> _connections = new ConcurrentDictionary<string, HubConnectionContext>();
public HubConnectionContext this[string connectionId]
{
get
{
_connections.TryGetValue(connectionId, out var connection);
return connection;
}
}
public int Count => _connections.Count;
public void Add(HubConnectionContext connection)
{
_connections.TryAdd(connection.ConnectionId, connection);
}
public void Remove(HubConnectionContext connection)
{
_connections.TryRemove(connection.ConnectionId, out _);
}
public Enumerator GetEnumerator()
{
return new Enumerator(this);
}
public readonly struct Enumerator : IEnumerator<HubConnectionContext>
{
private readonly IEnumerator<KeyValuePair<string, HubConnectionContext>> _enumerator;
public Enumerator(HubConnectionStore hubConnectionList)
{
_enumerator = hubConnectionList._connections.GetEnumerator();
}
public HubConnectionContext Current => _enumerator.Current.Value;
object IEnumerator.Current => Current;
public void Dispose() => _enumerator.Dispose();
public bool MoveNext() => _enumerator.MoveNext();
public void Reset() => _enumerator.Reset();
}
}
}