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); } }
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); } }
// 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); }