File: FrameworkFork\System.ServiceModel\System\ServiceModel\Channels\NamedPipeConnectionPoolSettings.cs
Web Access
Project: src\src\dotnet-svcutil\lib\src\dotnet-svcutil-lib.csproj (dotnet-svcutil-lib)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
namespace System.ServiceModel.Channels
{
    using System.Runtime;
 
    public sealed class NamedPipeConnectionPoolSettings
    {
        string _groupName;
        TimeSpan _idleTimeout;
        int _maxOutputConnectionsPerEndpoint;
 
        internal NamedPipeConnectionPoolSettings()
        {
            _groupName = ConnectionOrientedTransportDefaults.ConnectionPoolGroupName;
            _idleTimeout = ConnectionOrientedTransportDefaults.IdleTimeout;
            _maxOutputConnectionsPerEndpoint = ConnectionOrientedTransportDefaults.MaxOutboundConnectionsPerEndpoint;
        }
 
        internal NamedPipeConnectionPoolSettings(NamedPipeConnectionPoolSettings namedPipe)
        {
            this._groupName = namedPipe._groupName;
            this._idleTimeout = namedPipe._idleTimeout;
            this._maxOutputConnectionsPerEndpoint = namedPipe._maxOutputConnectionsPerEndpoint;
        }
 
        public string GroupName
        {
            get { return this._groupName; }
            set
            {
                if (value == null)
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
 
                this._groupName = value;
            }
        }
 
        public TimeSpan IdleTimeout
        {
            get { return this._idleTimeout; }
            set
            {
                if (value < TimeSpan.Zero)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value,
                        "SR.SFxTimeoutOutOfRange0"));
                }
 
                if (TimeoutHelper.IsTooLarge(value))
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value,
                        "SR.SFxTimeoutOutOfRangeTooBig"));
                }
 
                this._idleTimeout = value;
            }
        }
 
        public int MaxOutboundConnectionsPerEndpoint
        {
            get { return this._maxOutputConnectionsPerEndpoint; }
            set
            {
                if (value < 0)
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value,
                        "SR.ValueMustBeNonNegative"));
 
                this._maxOutputConnectionsPerEndpoint = value;
            }
        }
 
        internal NamedPipeConnectionPoolSettings Clone()
        {
            return new NamedPipeConnectionPoolSettings(this);
        }
 
        internal bool IsMatch(NamedPipeConnectionPoolSettings namedPipe)
        {
            if (this._groupName != namedPipe._groupName)
                return false;
 
            if (this._idleTimeout != namedPipe._idleTimeout)
                return false;
 
            if (this._maxOutputConnectionsPerEndpoint != namedPipe._maxOutputConnectionsPerEndpoint)
                return false;
 
            return true;
        }
    }
}