File: Internal\Infrastructure\ConnectionReference.cs
Web Access
Project: src\src\Servers\Kestrel\Core\src\Microsoft.AspNetCore.Server.Kestrel.Core.csproj (Microsoft.AspNetCore.Server.Kestrel.Core)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Diagnostics.CodeAnalysis;
 
namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure;
 
internal sealed class ConnectionReference
{
    private readonly long _id;
    private readonly WeakReference<KestrelConnection> _weakReference;
    private readonly TransportConnectionManager _transportConnectionManager;
 
    public ConnectionReference(long id, KestrelConnection connection, TransportConnectionManager transportConnectionManager)
    {
        _id = id;
 
        _weakReference = new WeakReference<KestrelConnection>(connection);
        ConnectionId = connection.TransportConnection.ConnectionId;
 
        _transportConnectionManager = transportConnectionManager;
    }
 
    public string ConnectionId { get; }
 
    public bool TryGetConnection([NotNullWhen(true)] out KestrelConnection? connection)
    {
        return _weakReference.TryGetTarget(out connection);
    }
 
    public void StopTransportTracking()
    {
        _transportConnectionManager.StopTracking(_id);
    }
}