public PlainWebSocketConn(bool asClient) : base(asClient)
        {
            //-------------------
            //send,resp
            _sockAsyncSender = new SocketAsyncEventArgs();
            _sockAsyncSender.SetBuffer(new byte[RECV_BUFF_SIZE], 0, RECV_BUFF_SIZE);
            _sendIO = new SendIO(_sockAsyncSender, 0, RECV_BUFF_SIZE, HandleSendCompleted);
            _sockAsyncSender.Completed += new EventHandler <SocketAsyncEventArgs>((s, e) =>
            {
                switch (e.LastOperation)
                {
                default:
                    {
                    }
                    break;

                case SocketAsyncOperation.Send:
                    {
                        _sendIO.ProcessWaitingData();
                    }
                    break;

                case SocketAsyncOperation.Receive:
                    {
                    }
                    break;
                }
            });
            _webSocketResp = new WebSocketResponse(_connectionId, asClient, this);

            //------------------------------------------------------------------------------------
            //recv,req ,new socket
            _sockAsyncListener = new SocketAsyncEventArgs();
            _sockAsyncListener.SetBuffer(new byte[RECV_BUFF_SIZE], 0, RECV_BUFF_SIZE);
            _recvIO = new RecvIO(_sockAsyncListener, 0, RECV_BUFF_SIZE, HandleReceivedData);


            RecvIOBufferStream recvIOStream = new RecvIOBufferStream();

            _webSocketReqParser = new WebSocketProtocolParser(this, recvIOStream);
            _webSocketReqParser.SetNewParseResultHandler(req =>
            {
                WebSocketReqInputQueue.Enqueue(new WebSocketReqQueueItem(this, req));
            });
            _sockAsyncListener.Completed += new EventHandler <SocketAsyncEventArgs>((s, e) =>
            {
                switch (e.LastOperation)
                {
                default:
                    {
                    }
                    break;

                case SocketAsyncOperation.Send:
                    {
                    }
                    break;

                case SocketAsyncOperation.Receive:
                    {
                        //copy data and write to recvIO stream

                        int recvByteCount = e.BytesTransferred;
                        if (recvByteCount > 0)
                        {
                            //TODO
                            byte[] tmp1 = new byte[recvByteCount];
                            Buffer.BlockCopy(e.Buffer, 0, tmp1, 0, recvByteCount);
                            recvIOStream.WriteData(tmp1, recvByteCount);
                            _recvIO.ProcessReceivedData();
                        }
                    }
                    break;
                }
            });
            //------------------------------------------------------------------------------------
        }
 internal WebSocketProtocolParser(WebSocketConnectionBase owner, RecvIOBufferStream recvBufferStream)
 {
     OwnerWebSocketConnBase = owner;
     _asClientContext       = owner.AsClientContext;
     _myBufferStream        = recvBufferStream;
 }
 internal WebSocketProtocolParser(WebSocketContext context, RecvIO recvIO)
 {
     this.recvIO        = recvIO;
     this._ownerContext = context;
     myBufferStream     = new RecvIOBufferStream(recvIO);
 }