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); } } }
protected WebSocketBase(Stream innerStream, string subProtocol, TimeSpan keepAliveInterval, WebSocketBuffer internalBuffer) { Contract.Assert(internalBuffer != null, "'internalBuffer' MUST NOT be NULL."); WebSocketHelpers.ValidateInnerStream(innerStream); WebSocketHelpers.ValidateOptions(subProtocol, internalBuffer.ReceiveBufferSize, internalBuffer.SendBufferSize, keepAliveInterval); s_LoggingEnabled = Logging.On && Logging.WebSockets.Switch.ShouldTrace(TraceEventType.Critical); string parameters = string.Empty; if (s_LoggingEnabled) { parameters = string.Format(CultureInfo.InvariantCulture, "ReceiveBufferSize: {0}, SendBufferSize: {1}, Protocols: {2}, KeepAliveInterval: {3}, innerStream: {4}, internalBuffer: {5}", internalBuffer.ReceiveBufferSize, internalBuffer.SendBufferSize, subProtocol, keepAliveInterval, Logging.GetObjectLogHash(innerStream), Logging.GetObjectLogHash(internalBuffer)); Logging.Enter(Logging.WebSockets, this, Methods.Initialize, parameters); } m_ThisLock = new object(); try { m_InnerStream = innerStream; m_InternalBuffer = internalBuffer; if (s_LoggingEnabled) { Logging.Associate(Logging.WebSockets, this, m_InnerStream); Logging.Associate(Logging.WebSockets, this, m_InternalBuffer); } m_CloseOutstandingOperationHelper = new OutstandingOperationHelper(); m_CloseOutputOutstandingOperationHelper = new OutstandingOperationHelper(); m_ReceiveOutstandingOperationHelper = new OutstandingOperationHelper(); m_SendOutstandingOperationHelper = new OutstandingOperationHelper(); m_State = WebSocketState.Open; m_SubProtocol = subProtocol; m_SendFrameThrottle = new SemaphoreSlim(1, 1); m_CloseStatus = null; m_CloseStatusDescription = null; m_InnerStreamAsWebSocketStream = innerStream as IWebSocketStream; if (m_InnerStreamAsWebSocketStream != null) { m_InnerStreamAsWebSocketStream.SwitchToOpaqueMode(this); } m_KeepAliveTracker = KeepAliveTracker.Create(keepAliveInterval); } finally { if (s_LoggingEnabled) { Logging.Exit(Logging.WebSockets, this, Methods.Initialize, parameters); } } }