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

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

private ReadDir ( uint requestId, byte handle ) : ICollection
requestId uint
handle byte
Результат ICollection
        private ICollection<SFTPFileInfo> ReadDir(uint requestId, byte[] handle)
        {
            SFTPPacket packet =
                new SFTPPacket(SFTPPacketType.SSH_FXP_READDIR)
                    .WriteUInt32(requestId)
                    .WriteAsString(handle);

            List<SFTPFileInfo> fileList = new List<SFTPFileInfo>();
            bool result = false;

            _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) {
                                result = true;
                                return true;    // processed
                            }
                            else {
                                throw exception;
                            }
                        }
                    }
                    else if (packetType == SFTPPacketType.SSH_FXP_NAME) {
                        uint id = dataReader.ReadUInt32();
                        if (id == requestId) {
                            uint count = (uint)dataReader.ReadInt32();

                            // use Encoding object with replacement fallback
                            Encoding encoding = Encoding.GetEncoding(
                                                _encoding.CodePage,
                                                EncoderFallback.ReplacementFallback,
                                                DecoderFallback.ReplacementFallback);

                            for (int i = 0; i < count; i++) {
                                SFTPFileInfo fileInfo = ReadFileInfo(dataReader, encoding);
                                fileList.Add(fileInfo);
                            }

                            result = true;   // OK, received SSH_FXP_NAME

                            return true;    // processed
                        }
                    }

                    return false;   // ignored
                },
                _protocolTimeout
            );

            // sanity check
            if (!Volatile.Read(ref result)) {
                throw new SFTPClientException("Missing SSH_FXP_NAME");
            }

            return fileList;
        }