System.Net.WebSockets.WebSocketBase.WebSocketBase C# (CSharp) Method

WebSocketBase() protected method

protected WebSocketBase ( Stream innerStream, string subProtocol, TimeSpan keepAliveInterval, WebSocketBuffer internalBuffer ) : System.Collections.Generic
innerStream System.IO.Stream
subProtocol string
keepAliveInterval TimeSpan
internalBuffer WebSocketBuffer
return System.Collections.Generic
        protected WebSocketBase(Stream innerStream,
            string subProtocol,
            TimeSpan keepAliveInterval,
            WebSocketBuffer internalBuffer)
        {
            Debug.Assert(internalBuffer != null, "'internalBuffer' MUST NOT be NULL.");
            WebSocketValidate.ValidateInnerStream(innerStream);
            WebSocketValidate.ValidateOptions(subProtocol, internalBuffer.ReceiveBufferSize,
                internalBuffer.SendBufferSize, keepAliveInterval);

            string parameters = string.Empty;

            if (NetEventSource.IsEnabled)
            {
                parameters = string.Format(CultureInfo.InvariantCulture,
                    "ReceiveBufferSize: {0}, SendBufferSize: {1},  Protocols: {2}, KeepAliveInterval: {3}, innerStream: {4}, internalBuffer: {5}",
                    internalBuffer.ReceiveBufferSize,
                    internalBuffer.SendBufferSize,
                    subProtocol,
                    keepAliveInterval,
                    NetEventSource.GetHashCode(innerStream),
                    NetEventSource.GetHashCode(internalBuffer));

                NetEventSource.Enter(this, parameters);
            }

            _thisLock = new object();

            try
            {
                _innerStream = innerStream;
                _internalBuffer = internalBuffer;
                if (NetEventSource.IsEnabled)
                {
                    NetEventSource.Associate(this, _innerStream);
                    NetEventSource.Associate(this, _internalBuffer);
                }

                _closeOutstandingOperationHelper = new OutstandingOperationHelper();
                _closeOutputOutstandingOperationHelper = new OutstandingOperationHelper();
                _receiveOutstandingOperationHelper = new OutstandingOperationHelper();
                _sendOutstandingOperationHelper = new OutstandingOperationHelper();
                _state = WebSocketState.Open;
                _subProtocol = subProtocol;
                _sendFrameThrottle = new SemaphoreSlim(1, 1);
                _closeStatus = null;
                _closeStatusDescription = null;
                _innerStreamAsWebSocketStream = innerStream as IWebSocketStream;
                if (_innerStreamAsWebSocketStream != null)
                {
                    _innerStreamAsWebSocketStream.SwitchToOpaqueMode(this);
                }
                _keepAliveTracker = KeepAliveTracker.Create(keepAliveInterval);
            }
            finally
            {
                if (NetEventSource.IsEnabled)
                {
                    NetEventSource.Exit(this, parameters);
                }
            }
        }