File: Internal\Infrastructure\ConnectionReference.cs
Web Access
Project: src\aspnetcore\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);
    }
}