#region Copyright & License Information /* * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, * see COPYING. */ #endregion using System; using System.ComponentModel; using System.Net; namespace OpenRA { public class Download { WebClient wc; bool cancelled; public Download(string url, string path, Action onProgress, Action onComplete) { wc = new WebClient(); wc.Proxy = null; wc.DownloadProgressChanged += (_,a) => onProgress(a); wc.DownloadFileCompleted += (_,a) => onComplete(a, cancelled); Game.OnQuit += () => Cancel(); wc.DownloadFileCompleted += (_,a) => {Game.OnQuit -= () => Cancel();}; wc.DownloadFileAsync(new Uri(url), path); } public void Cancel() { Game.OnQuit -= () => Cancel(); wc.CancelAsync(); cancelled = true; } public static string FormatErrorMessage(Exception e) { var ex = e as System.Net.WebException; if (ex == null) return e.Message; switch(ex.Status) { case WebExceptionStatus.NameResolutionFailure: case WebExceptionStatus.Timeout: case WebExceptionStatus.ConnectFailure: return "Cannot connect to remote server"; case WebExceptionStatus.ProtocolError: return "File not found on remote server"; default: return ex.Message; } } } }