コード例 #1
0
        private bool ReadCommandLenght(out int length)
        {
            length = -1;
            var buffers = new List <SocketBuffer>();

            if (!GetDataBuffers(10, buffers))
            {
                return(false);
            }
            else if (buffers.Count == 1)
            {
                length = BitConverter.ToInt32(SocketBufferUtil.ReadBytesFromSocketBuffer(10, buffers[0]), 0);
                return(true);
            }
            else
            {
                var    lengthBytes   = new byte[10];
                byte[] partialBytes1 = SocketBufferUtil.ReadBytesFromSocketBuffer((int)buffers[0].UnreadBytes, buffers[0]);
                byte[] partialBytes2 = SocketBufferUtil.ReadBytesFromSocketBuffer(10 - partialBytes1.Length, buffers[1]);
                Array.Copy(partialBytes1, lengthBytes, partialBytes1.Length);
                Array.Copy(partialBytes2, 0, lengthBytes, partialBytes1.Length - 1, partialBytes2.Length);
                length = BitConverter.ToInt32(lengthBytes, 0);
                return(true);
            }
        }
コード例 #2
0
        private bool ReadAcknowledgmentId(out int ackId)
        {
            // Check if acknowledgments are enabled.
            ackId = -1;
            var buffers = new List <SocketBuffer>();

            if (!GetDataBuffers(10, buffers))
            {
                return(false);
            }
            else if (buffers.Count == 1)
            {
                ackId = BitConverter.ToInt32(SocketBufferUtil.ReadBytesFromSocketBuffer(10, buffers[0]), 0);
                return(true);
            }
            else
            {
                var    lengthBytes   = new byte[10];
                byte[] partialBytes1 = SocketBufferUtil.ReadBytesFromSocketBuffer((int)buffers[0].UnreadBytes, buffers[0]);
                byte[] partialBytes2 = SocketBufferUtil.ReadBytesFromSocketBuffer(10 - partialBytes1.Length, buffers[1]);
                Array.Copy(partialBytes1, lengthBytes, partialBytes1.Length);
                Array.Copy(partialBytes2, 0, lengthBytes, partialBytes1.Length - 1, partialBytes2.Length);
                ackId = BitConverter.ToInt32(lengthBytes, 0);
                return(true);
            }
        }
コード例 #3
0
        // TODO: Introduce the .Net 4.7.x's Span class here.
        public override int Read(byte[] buffer, int offset, int count)
        {
            if (buffer == null)
            {
                throw new ArgumentNullException("buffer");
            }
            if (offset < 0 /*|| _commandLength - _position < offset*/)
            {
                throw new ArgumentOutOfRangeException("offset");
            }
            if (count < 0 /*|| _commandLength - _position < count*/)
            {
                throw new ArgumentOutOfRangeException("count");
            }
            if (buffer.Length - offset < count)
            {
                throw new ArgumentException("Argument_InvalidOffLen");
            }
            if (_buffers.Count == 0)
            {
                throw new Exception("No Buffer");
            }

            int bytesRead = 0;

            while (bytesRead < count && _currBufferIndex < _buffers.Count)
            {
                SocketBuffer currentBuffer = _buffers[_currBufferIndex];


                bytesRead += SocketBufferUtil.ReadBytesFromSocketBuffer(buffer, offset + bytesRead, count - bytesRead, currentBuffer);
                _position += bytesRead;
                if (currentBuffer.UnreadBytes == 0)
                {
                    _currBufferIndex++;
                }
                // }
            }
            return(bytesRead);
        }