Files
2022-03-07 14:35:38 +09:00

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;
}
}
}