Granados.Poderosa.SFTP.SFTPClient.ReadFile C# (CSharp) Метод

ReadFile() приватный Метод

private ReadFile ( uint requestId, byte handle, ulong offset, int length, byte buffer ) : int
requestId uint
handle byte
offset ulong
length int
buffer byte
Результат int
        private int ReadFile(uint requestId, byte[] handle, ulong offset, int length, byte[] buffer)
        {
            SFTPPacket packet =
                new SFTPPacket(SFTPPacketType.SSH_FXP_READ)
                    .WriteUInt32(requestId)
                    .WriteAsString(handle)
                    .WriteUInt64(offset)
                    .WriteInt32(length);

            int? readLength = null;

            _eventHandler.ClearResponseBuffer();
            Transmit(packet);
            _eventHandler.WaitResponse(
                (packetType, dataReader) => {
                    if (packetType == SFTPPacketType.SSH_FXP_STATUS) {
                        SFTPClientErrorException exception = SFTPClientErrorException.Create(dataReader);
                        if (exception.ID == requestId) {
                            if (exception.Code == SFTPStatusCode.SSH_FX_EOF) {
                                readLength = 0;
                                return true;    // processed
                            }
                            else {
                                throw exception;
                            }
                        }
                    }
                    else if (packetType == SFTPPacketType.SSH_FXP_DATA) {
                        uint id = dataReader.ReadUInt32();
                        if (id == requestId) {
                            readLength = dataReader.ReadByteStringInto(buffer);
                            return true;    // processed
                        }
                    }

                    return false;   // ignored
                },
                _protocolTimeout
            );

            // sanity check
            Thread.MemoryBarrier();
            if (!readLength.HasValue) {
                throw new SFTPClientException("Missing SSH_FXP_DATA");
            }

            return readLength.Value;
        }