public void Connect()
        {
            DateTime retryMaxTime = DateTime.Now + TimeSpan.FromSeconds(30);

            _ftpClient = _ftpClientFactory.Create();

            while (DateTime.Now < retryMaxTime)
            {
                try
                {
                    _ftpClient.Connect();
                    break;
                }
                catch (FtpCommandException ex)
                {
                    if (ex.IsTransient())
                    {
                        Serilog.Log.Warning(ex, "Unable to connect. Retrying");
                        Thread.Sleep(2000);
                    }
                    else
                    {
                        throw;
                    }
                }
                catch (TimeoutException ex)
                {
                    Serilog.Log.Warning(ex, "Timeout. Unable to connect. Retrying");
                    Thread.Sleep(2000);
                }
            }

            if (!_ftpClient.IsConnected)
            {
                throw new InvalidOperationException("Unable to connect to FTP. Maximum retries exceeded");
            }
        }
Пример #2
0
        public string[] Upload(IEnumerable <FtpFile> files, Action <ArchiveCreated> onArchived = null)
        {
            if (files == null)
            {
                throw new ArgumentNullException(nameof(files));
            }

            ArchiveOptions archiveOptions = _configuration.ArchiveOptions;

            if (archiveOptions != null)
            {
                var archive = _archive.Archive(archiveOptions.Name, newArchive =>
                {
                    newArchive.Options.GroupedBy(archiveOptions.GroupName);

                    if (archiveOptions.Expires.HasValue)
                    {
                        newArchive.Options.ExpiresOn(archiveOptions.Expires.Value);
                    }

                    foreach (FtpFile file in files)
                    {
                        newArchive.IncludeContent(file.FileName, file.Contents);
                    }
                });

                onArchived?.Invoke(archive);
            }

            IFtpClient ftpClient = _ftpClientFactory.Create(_configuration.FtpConnectionString);

            var encoding = new UTF8Encoding(false /* to ensure that Globase can read the file, this parameter is necessary */);

            return(files
                   .Select(file => ftpClient.UploadFromString(file.FileName, file.Contents, encoding))
                   .ToArray());
        }
Пример #3
0
 public FtpProvider(IFtpConfig config, IFtpClientFactory ftpClientFactory, IFtpParser <TPayload> parser)
 {
     _config    = config;
     _ftpClient = ftpClientFactory.Create(config.Host, config.Credentials);
     _parser    = parser;
 }