86 lines
2.9 KiB
C#
86 lines
2.9 KiB
C#
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;
|
|
}
|
|
}
|
|
|
|
} |