protected static MultiMirrorFileDownloadSpec GetDlSpec(FileQueueSpec spec, KeyValuePair<KeyValuePair<string, Func<IAbsoluteFilePath, bool>>, ITransferStatus> file) { var dlSpec = new MultiMirrorFileDownloadSpec(file.Key.Key, spec.Location.GetChildFileWithName(file.Key.Key)) { Progress = file.Value, Verification = file.Key.Value }; dlSpec.LocalFile.MakeSureParentPathExists(); return dlSpec; }
public void Download(MultiMirrorFileDownloadSpec spec) { spec.Start(); try { while (true) { var host = _mirrorStrategy.GetHost(); if (TryDownload(spec, host)) break; Thread.Sleep(MillisecondsTimeout); } } catch (Exception) { spec.Fail(); throw; } }
public void Download(MultiMirrorFileDownloadSpec spec, CancellationToken token) { spec.Start(); try { while (true) { token.ThrowIfCancellationRequested(); var host = _mirrorStrategy.GetHost(); if (TryDownload(spec, host)) break; Thread.Sleep(MillisecondsTimeout); } } catch (Exception) { spec.Fail(); throw; } }
public async Task DownloadAsync(MultiMirrorFileDownloadSpec spec) { spec.Start(); try { while (true) { var host = _mirrorStrategy.GetHost(); spec.UpdateHost(host); if (await TryDownloadAsync(spec, host).ConfigureAwait(false)) break; await Task.Delay(MillisecondsTimeout).ConfigureAwait(false); } } catch (Exception) { spec.Fail(); throw; } }
async Task<bool> TryDownloadAsync(MultiMirrorFileDownloadSpec spec, Uri host) { try { await TryDownloadFileAsync(spec, host).ConfigureAwait(false); spec.End(); return true; } catch (TransferException) {} catch (VerificationError) {} return false; }
bool TryDownload(MultiMirrorFileDownloadSpec spec, Uri host) { try { TryDownloadFile(spec, host); spec.End(); return true; } catch (TransferException) {} catch (VerificationError) {} return false; }
static FileDownloadSpec BuildSpec(MultiMirrorFileDownloadSpec spec, Uri host) { return spec.Progress == null ? new FileDownloadSpec(spec.GetUri(host), spec.LocalFile) { Verification = spec.Verification, CancellationToken = spec.CancellationToken } : new FileDownloadSpec(spec.GetUri(host), spec.LocalFile, spec.Progress) { Verification = spec.Verification, CancellationToken = spec.CancellationToken }; }
protected async Task TryDownloadFileAsync(MultiMirrorFileDownloadSpec spec, Uri host) { try { await _downloader.DownloadAsync(BuildSpec(spec, host)) .ConfigureAwait(false); } catch (Exception) { _mirrorStrategy.Failure(host); throw; } _mirrorStrategy.Success(host); }
protected void TryDownloadFile(MultiMirrorFileDownloadSpec spec, Uri host) { try { _downloader.Download(BuildSpec(spec, host)); } catch (Exception) { _mirrorStrategy.Failure(host); throw; } _mirrorStrategy.Success(host); }