private void UploadAllFiles(string gameName, UploadResumeReport uploadResumeReport) { long totalSizeToUpload = uploadResumeReport.RemainingFiles.Sum(x => x.UncompressedSize); ReportTotalBytesToUpload(gameName, totalSizeToUpload); BlockingCollection <IXboxTransferRequest> finishedRequests = new BlockingCollection <IXboxTransferRequest>(); XboxTransferWorker fileWorker1 = new XboxTransferWorker(_xboxGameRepositoryFactory, gameName, _xboxFtpRequests, finishedRequests, _notifier); XboxTransferWorker fileWorker2 = new XboxTransferWorker(_xboxGameRepositoryFactory, gameName, _xboxFtpRequests, finishedRequests, _notifier); XboxTransferProgressWorker progressWorker = new XboxTransferProgressWorker(_xboxGameRepositoryFactory, gameName, _notifier, finishedRequests, totalSizeToUpload, uploadResumeReport.SizeUploaded); progressWorker.Start(); fileWorker1.Start(); fileWorker2.Start(); _notifier.ReportTotalFilesToTransfer(gameName, uploadResumeReport.RemainingFiles.Count); foreach (var zipEntry in uploadResumeReport.RemainingFiles) { WaitIfMaxOutstandingRequests(); WaitIfMaxMemoryInQueue(); if (zipEntry.UncompressedSize > 14572800) { ExtractZipToDisk(zipEntry, gameName); } else { ExtractZipToMemory(zipEntry, gameName); } } _notifier.WaitingForUploadsToComplete(gameName); WaitForRequestsToComplete(); fileWorker1.Stop(); fileWorker2.Stop(); }
private UploadResumeReport CheckForResumeUpload(string gameName, string archivePath) { IXboxGameRepository xboxGameRepository = _xboxGameRepositoryFactory.Create(); xboxGameRepository.Connect(); UploadResumeReport uploadResumeReport = null; using (IZipFile zip = _zipFileProcessor.Read(archivePath)) { // Order files alphabetically to ensure we can resume interrupted uploads List <IZipEntry> files = zip.ReadAllFiles(); _notifier.CheckingForUploadedFiles(gameName); IUploadResumeStrategy uploadResumeStrategy = new BinarySearchUploadResumeStrategy(files, _notifier, gameName, xboxGameRepository); uploadResumeReport = uploadResumeStrategy.GetRemainingFiles(); } xboxGameRepository.Disconnect(); return(uploadResumeReport); }