public override async Task ResetAsync() { windowsFile = await CreateTemporaryFile(); fileStream = await windowsFile.OpenStreamForWriteAsync(); downloader = new RestRequests.Downloader(CloudFile.Id, fileStream); }
protected override async Task StartPrivateAsync() { switch (Status) { case NetworkStatus.ErrorNeedRestart: case NetworkStatus.NotStarted: case NetworkStatus.Paused: { if (Status != NetworkStatus.Paused) { //Status = NetworkStatus.Starting; //MyLogger.Assert(downloader == null && windowsFile == null && fileStream == null); windowsFile = await CreateTemporaryFile(); fileStream = await windowsFile.OpenStreamForWriteAsync(); downloader = new RestRequests.Downloader(CloudFile.Id, fileStream); } Status = NetworkStatus.Networking; var progressChangedEventHandler = new RestRequests.ProgressChangedEventHandler((bytesProcessed, totalLength) => { BytesDownloaded = bytesProcessed; TotalFileLength = totalLength; MyLogger.Assert(this.GetType() == typeof(Downloaders.FileDownloader)); OnProgressChanged(BytesDownloaded, TotalFileLength); }); var messageAppendedEventHandler = new MessageAppendedEventHandler((msg) => { OnMessageAppended("Rest: " + msg); }); downloader.ProgressChanged += progressChangedEventHandler; downloader.MessageAppended += messageAppendedEventHandler; await downloader.DownloadAsync(); downloader.ProgressChanged -= progressChangedEventHandler; downloader.MessageAppended -= messageAppendedEventHandler; downloadAgain_index :; switch (downloader.Status) { case RestRequests.Downloader.DownloadStatus.Completed : { fileStream.Dispose(); Status = NetworkStatus.Completed; return; } case RestRequests.Downloader.DownloadStatus.ErrorNeedRestart: { OnMessageAppended("Error need restart"); Status = NetworkStatus.ErrorNeedRestart; return; } case RestRequests.Downloader.DownloadStatus.ErrorNeedResume: { OnMessageAppended("Error need resume..."); goto downloadAgain_index; } case RestRequests.Downloader.DownloadStatus.Paused: { Status = NetworkStatus.Paused; return; } case RestRequests.Downloader.DownloadStatus.Downloading: case RestRequests.Downloader.DownloadStatus.NotStarted: default: throw new Exception($"downloader.Status: {downloader.Status}"); } } case NetworkStatus.Completed: case NetworkStatus.Networking: //case NetworkStatus.Starting: default: throw new Exception($"Status: {Status}"); } }