System.Net.StreamFramer.ReadMessage C# (CSharp) Method

ReadMessage() public method

public ReadMessage ( ) : byte[]
return byte[]
        public byte[] ReadMessage()
        {
            if (_eof)
            {
                return null;
            }

            int offset = 0;
            byte[] buffer = _readHeaderBuffer;

            int bytesRead;
            while (offset < buffer.Length)
            {
                bytesRead = Transport.Read(buffer, offset, buffer.Length - offset);
                if (bytesRead == 0)
                {
                    if (offset == 0)
                    {
                        // m_Eof, return null
                        _eof = true;
                        return null;
                    }
                    else
                    {
                        throw new IOException(SR.Format(SR.net_io_readfailure, SR.Format(SR.net_io_connectionclosed)));
                    }
                }

                offset += bytesRead;
            }

            _curReadHeader.CopyFrom(buffer, 0, _readVerifier);
            if (_curReadHeader.PayloadSize > _curReadHeader.MaxMessageSize)
            {
                throw new InvalidOperationException(SR.Format(SR.net_frame_size,
                                                               _curReadHeader.MaxMessageSize.ToString(NumberFormatInfo.InvariantInfo),
                                                               _curReadHeader.PayloadSize.ToString(NumberFormatInfo.InvariantInfo)));
            }

            buffer = new byte[_curReadHeader.PayloadSize];

            offset = 0;
            while (offset < buffer.Length)
            {
                bytesRead = Transport.Read(buffer, offset, buffer.Length - offset);
                if (bytesRead == 0)
                {
                    throw new IOException(SR.Format(SR.net_io_readfailure, SR.Format(SR.net_io_connectionclosed)));
                }

                offset += bytesRead;
            }
            return buffer;
        }