/// <summary>
        /// parse
        /// </summary>
        /// <param name="connection"></param>
        /// <param name="buffer"></param>
        /// <param name="maxMessageSize"></param>
        /// <param name="recvivedMessageInfo"></param>
        /// <param name="readlength"></param>
        /// <returns></returns>
        /// <exception cref="BadProtocolException">bad thrift protocol</exception>
        public bool TryParse(IConnection connection, ArraySegment <byte> buffer, int maxMessageSize, out IRecvivedMessageInfo <TThriftMessage> recvivedMessageInfo, out int readlength)
        {
            recvivedMessageInfo = null;
            readlength          = 0;
            if (buffer.Count < 4)
            {
                return(false);
            }

            //获取message length
            var messageLength = Utils.NetworkBitConverter.ToInt32(buffer.Array, buffer.Offset);

            if (messageLength < 10)
            {
                throw new BadProtocolException("bad thrift protocol");
            }
            if (messageLength > maxMessageSize)
            {
                throw new BadProtocolException("message is too long");
            }

            readlength = messageLength + 4;
            if (buffer.Count < readlength)
            {
                readlength = 0;
                return(false);
            }

            bool isSync = BitConverter.ToBoolean(buffer.Array, buffer.Offset + 4);
            int  seqId  = Utils.NetworkBitConverter.ToInt32(buffer.Array, buffer.Offset + 5);

            var payload = new byte[messageLength - 6];

            Buffer.BlockCopy(buffer.Array, buffer.Offset + 10, payload, 0, payload.Length);
            var message = CreateThriftMessage(payload);

            recvivedMessageInfo = new RecvivedMessageInfo <TThriftMessage>(message, isSync, seqId);
            return(true);
        }
        /// <summary>
        /// parse
        /// </summary>
        /// <param name="connection"></param>
        /// <param name="buffer"></param>
        /// <param name="maxMessageSize"></param>
        /// <param name="recvMessageInfo"></param>
        /// <param name="readlength"></param>
        /// <returns></returns>
        /// <exception cref="BadProtocolException">bad command line protocol</exception>
        public bool TryParse(IConnection connection, ArraySegment <byte> buffer, int maxMessageSize, out IRecvivedMessageInfo <CommandLineMessage> recvMessageInfo, out int readlength)
        {
            recvMessageInfo = null;
            readlength      = 0;

            if (buffer.Count < 2)
            {
                return(false);
            }

            //查找\r\n标记符
            for (int i = buffer.Offset, len = buffer.Offset + buffer.Count; i < len; i++)
            {
                if (buffer.Array[i] == 13 && i + 1 < len && buffer.Array[i + 1] == 10)
                {
                    readlength = i + 2 - buffer.Offset;

                    if (readlength == 2)
                    {
                        recvMessageInfo = new RecvivedMessageInfo <CommandLineMessage>(new CommandLineMessage(string.Empty), false); return(true);
                    }
                    if (readlength > maxMessageSize)
                    {
                        throw new BadProtocolException("message is too long");
                    }

                    string text  = Encoding.UTF8.GetString(buffer.Array, buffer.Offset, readlength - 2);
                    var    array = text.Split(SPLITER, StringSplitOptions.RemoveEmptyEntries);
                    var    queue = new Queue <string>(array);
                    recvMessageInfo = new RecvivedMessageInfo <CommandLineMessage>(ParseMessageText(queue, out var isSync, out int seqId), isSync, seqId);
                    return(true);
                }
            }
            readlength = 0;
            return(false);
        }