public static WebSocket CreateClientWebSocket(Stream innerStream,
                                                      string subProtocol,
                                                      int receiveBufferSize,
                                                      int sendBufferSize,
                                                      TimeSpan keepAliveInterval,
                                                      bool useZeroMaskingKey,
                                                      ArraySegment <byte> internalBuffer)
        {
            if (!WebSocketProtocolComponent.IsSupported)
            {
                WebSocketHelpers.ThrowPlatformNotSupportedException_WSPC();
            }

            WebSocketHelpers.ValidateInnerStream(innerStream);
            WebSocketHelpers.ValidateOptions(subProtocol, receiveBufferSize, sendBufferSize, keepAliveInterval);
            WebSocketHelpers.ValidateArraySegment <byte>(internalBuffer, "internalBuffer");
            WebSocketBuffer.Validate(internalBuffer.Count, receiveBufferSize, sendBufferSize, false);

            return(new InternalClientWebSocket(innerStream,
                                               subProtocol,
                                               receiveBufferSize,
                                               sendBufferSize,
                                               keepAliveInterval,
                                               useZeroMaskingKey,
                                               internalBuffer));
        }
        internal static WebSocket CreateServerWebSocket(Stream innerStream,
                                                        string subProtocol,
                                                        int receiveBufferSize,
                                                        TimeSpan keepAliveInterval,
                                                        ArraySegment <byte> internalBuffer)
        {
            if (!WebSocketProtocolComponent.IsSupported)
            {
                WebSocketHelpers.ThrowPlatformNotSupportedException_WSPC();
            }

            WebSocketHelpers.ValidateInnerStream(innerStream);
            WebSocketHelpers.ValidateOptions(subProtocol, receiveBufferSize, WebSocketBuffer.MinSendBufferSize, keepAliveInterval);
            WebSocketHelpers.ValidateArraySegment <byte>(internalBuffer, "internalBuffer");
            WebSocketBuffer.Validate(internalBuffer.Count, receiveBufferSize, WebSocketBuffer.MinSendBufferSize, true);

            return(new ServerWebSocket(innerStream,
                                       subProtocol,
                                       receiveBufferSize,
                                       keepAliveInterval,
                                       internalBuffer));
        }