File: System\ServiceModel\WasHosting\TcpAppDomainProtocolHandler.cs
Project: ndp\cdf\src\WCF\WasHosting\System.ServiceModel.WasHosting.csproj (System.ServiceModel.WasHosting)
//----------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------------------
 
namespace System.ServiceModel.WasHosting
{
    using System.Diagnostics.CodeAnalysis;
    using System.Runtime;
    using System.ServiceModel.Activation;
    using System.ServiceModel.Channels;
 
    [SuppressMessage(FxCop.Category.Performance, FxCop.Rule.AvoidUninstantiatedInternalClasses,
        Justification = "Instantiated by ASP.NET")]
    class TcpAppDomainProtocolHandler : BaseAppDomainProtocolHandler
    {
        HostedTcpTransportManager transportManager;
        // HostedTcpTransportManager isn't thread safe when calling Start and Stop concurrently.
        private static object m_lock = new object();
 
        public TcpAppDomainProtocolHandler()
            : base(Uri.UriSchemeNetTcp)
        {
        }
 
        protected override void OnStart()
        {
            TcpHostedTransportConfiguration configuration = HostedTransportConfigurationManager.GetConfiguration(Uri.UriSchemeNetTcp) as TcpHostedTransportConfiguration;
            transportManager = configuration.TransportManager as HostedTcpTransportManager;
            lock (m_lock)
            {
                transportManager.Start(listenerChannelContext.ListenerChannelId, listenerChannelContext.Token, OnMessageReceived);
            }
        }
 
        protected override void OnStop()
        {
            if (transportManager != null)
            {
                lock (m_lock)
                {
                    transportManager.Stop(DefaultStopTimeout);
                }
            }
        }
    }
}