using System; using System.ComponentModel; using System.IO; using System.Net; namespace Mitria_Minecraft_Launcher { public class Downloader { private static int BufferSize = 1024 * 1240 * 1; //1MB public delegate void DownloaderProgressChangedEventHandler(object sender, DownloaderProgressChangedEventArgs downloaderProgressChangedEventArgs); public event DownloaderProgressChangedEventHandler DownloaderProgressChangedEvent; public void DownloadFile(string url, string path) { HttpWebRequest request = WebRequest.CreateHttp(url); WebResponse response = request.GetResponse(); long fileSize = long.Parse(response.Headers.Get("Content-Length")); Stream webStream = response.GetResponseStream(); Stream fileStream = File.Open(path, FileMode.Create); byte[] buffer = new byte[BufferSize]; int length = 0; int processedByte = 0; while ((length = webStream.Read(buffer, 0, BufferSize)) > 0) { fileStream.Write(buffer, 0, length); processedByte += length; var e = new DownloaderProgressChangedEventArgs(processedByte, fileSize); DownloaderProgressChangedEvent?.Invoke(this, e); } webStream.Dispose(); fileStream.Dispose(); } public string DownloadString(string url) { try { HttpWebRequest request = WebRequest.CreateHttp(url); WebResponse response = request.GetResponse(); StreamReader streamReader = new StreamReader(response.GetResponseStream()); string resultString = streamReader.ReadToEnd(); streamReader.Close(); return resultString; } catch (WebException ex) { switch (ex.Status) { case WebExceptionStatus.ConnectFailure: CommonLibrary.Log.FATAL("ConnectFailure : " + url); break; case WebExceptionStatus.Timeout: CommonLibrary.Log.FATAL("TimeOut : " + url); break; case WebExceptionStatus.ProtocolError: CommonLibrary.Log.FATAL("Not Found Page : " + url); break; default: break; } return string.Empty; } } } public class DownloaderProgressChangedEventArgs : EventArgs { public long ProcessedByte { get; set; } public long FileSize { get; set; } public DownloaderProgressChangedEventArgs(long processByte, long fileSize) { ProcessedByte = processByte; FileSize = fileSize; } } }