File: DelegationRule.cs
Web Access
Project: src\src\Servers\HttpSys\src\Microsoft.AspNetCore.Server.HttpSys.csproj (Microsoft.AspNetCore.Server.HttpSys)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.Extensions.Logging;
 
namespace Microsoft.AspNetCore.Server.HttpSys;
 
/// <summary>
/// Rule that maintains a handle to the Request Queue and UrlPrefix to
/// delegate to.
/// </summary>
public class DelegationRule : IDisposable
{
    private readonly ILogger _logger;
    private readonly UrlGroup _sourceQueueUrlGroup;
    private bool _disposed;
 
    /// <summary>
    /// The name of the Http.Sys request queue
    /// </summary>
    public string QueueName { get; }
 
    /// <summary>
    /// The URL of the Http.Sys Url Prefix
    /// </summary>
    public string UrlPrefix { get; }
 
    internal RequestQueue Queue { get; }
 
    internal DelegationRule(UrlGroup sourceQueueUrlGroup, string queueName, string urlPrefix, ILogger logger)
    {
        _sourceQueueUrlGroup = sourceQueueUrlGroup;
        _logger = logger;
        QueueName = queueName;
        UrlPrefix = urlPrefix;
        Queue = new RequestQueue(queueName, _logger);
    }
 
    /// <inheritdoc />
    public void Dispose()
    {
        if (_disposed)
        {
            return;
        }
 
        _disposed = true;
 
        try
        {
            _sourceQueueUrlGroup.UnSetDelegationProperty(Queue, throwOnError: false);
        }
        catch (ObjectDisposedException) { /* Server may have been shutdown */ }
        Queue.Dispose();
    }
}