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"); } }
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()); }
public FtpProvider(IFtpConfig config, IFtpClientFactory ftpClientFactory, IFtpParser <TPayload> parser) { _config = config; _ftpClient = ftpClientFactory.Create(config.Host, config.Credentials); _parser = parser; }