//----------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------------------


namespace System.ServiceModel.Activation
{
    using System.Collections.Generic;
    using System.ServiceModel;
    using System.ServiceModel.Channels;
    using System.Diagnostics;

    sealed class TcpHostedTransportConfiguration : HostedTransportConfigurationBase
    {
        HostedTcpTransportManager uniqueManager;

        public TcpHostedTransportConfiguration()
            : base(Uri.UriSchemeNetTcp)
        {
            string[] bindings = HostedTransportConfigurationManager.MetabaseSettings.GetBindings(Uri.UriSchemeNetTcp);
            for (int i = 0; i < bindings.Length; i++)
            {
                BaseUriWithWildcard listenAddress = BaseUriWithWildcard.CreateHostedUri(Uri.UriSchemeNetTcp, bindings[i], HostingEnvironmentWrapper.ApplicationVirtualPath);
                if (i == 0)
                {
                    Debug.Print("TcpHostedTransportConfiguration.ctor() Creating the unique TcpTransportManager with ListenUri:" + listenAddress.BaseAddress);
                    uniqueManager = new HostedTcpTransportManager(listenAddress);
                }

                this.ListenAddresses.Add(listenAddress);
                Debug.Print("Registering the unique TcpTransportManager with ListenUri:" + listenAddress.BaseAddress);
                TcpChannelListener.StaticTransportManagerTable.RegisterUri(listenAddress.BaseAddress, listenAddress.HostNameComparisonMode, uniqueManager);
            }
        }

        internal TcpTransportManager TransportManager { get { return uniqueManager; } }
    }
}