Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.IO;
- using System.Net;
- using System.Text.RegularExpressions;
- using System.Globalization;
- using System.Threading;
- using System.Media;
- using System.Runtime.InteropServices;
- using System.Windows.Forms;
- namespace Updater
- {
- public partial class FormMain : Form
- {
- public FormMain()
- {
- InitializeComponent();
- }
- // On définie quelques string
- public string url = "ftp://51.255.96.243/addons/";
- public string url2 = "ftp://51.255.96.243/";
- public string ftpUserName = "Launcher";
- public string ftpPassWord = "FybFYRwPo3y#";
- public string remoteDir = @"/";
- public long sizeAddons;
- public long addonsLongCheck;
- public long addonsLongLastCheck;
- public long addonsTotal;
- public long fileCheck;
- public long sizeMain;
- public long mainLongCheck;
- public long mainLongLastCheck;
- public long mainTotal;
- public long fileCheckMain;
- public bool addonsCheck;
- public bool addonsDownload;
- public bool mainCheck;
- public bool mainDownload;
- List<string[]> strListFileNameFtp = new List<string[]>();
- List<string[]> strListFileNameLocal = new List<string[]>();
- List<string[]> strListFileNameFtpMain = new List<string[]>();
- List<string[]> strListFileNameLocalMain = new List<string[]>();
- public void flatClose1_Click(object sender, EventArgs e)
- {
- Application.Exit();
- }
- public void flatMini1_Click(object sender, EventArgs e)
- {
- FormMain f = new FormMain();
- f.WindowState = FormWindowState.Minimized;
- }
- public void FormMain_Load(object sender, EventArgs e)
- {
- AddonsWorker.RunWorkerAsync();
- MainWorker.RunWorkerAsync();
- ProgressbarGeneralWorker.RunWorkerAsync();
- }
- private void ProgressbarGeneralWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
- {
- int valueLocal = (strListFileNameLocal.Count / 2) + (strListFileNameLocalMain.Count / 2);
- int valueFTP = (strListFileNameFtp.Count / 2) + (strListFileNameFtpMain.Count / 2);
- progressbarGeneral.Value = valueLocal / valueFTP;
- }
- private void AddonsWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
- {
- // Création de la requête pour récup les fichiers
- FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://51.255.96.243/addons/");
- request.Credentials = new NetworkCredential("Launcher", "FybFYRwPo3y#");
- request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
- // On lit la liste des fichiers
- StreamReader streamReader = new StreamReader(request.GetResponse().GetResponseStream());
- string fileName = streamReader.ReadLine();
- // On créer une liste de tous les fichiers présent sur le FTP
- List<string[]> strListFileNameFtp = new List<string[]>();
- // String pour récup les infos
- string pattern =
- @"^" + //# Start of line
- @"(?<dir>[\-ld])" + //# File size
- @"(?<permission>[\-rwx]{9})" + //# Whitespace \n
- @"\s+" + //# Whitespace \n
- @"(?<filecode>\d+)" +
- @"\s+" + //# Whitespace \n
- @"(?<owner>\w+)" +
- @"\s+" + //# Whitespace \n
- @"(?<group>\w+)" +
- @"\s+" + //# Whitespace \n
- @"(?<size>\d+)" +
- @"\s+" + //# Whitespace \n
- @"(?<month>\w{3})" + //# Month (3 letters) \n
- @"\s+" + //# Whitespace \n
- @"(?<day>\d{1,2})" + //# Day (1 or 2 digits) \n
- @"\s+" + //# Whitespace \n
- @"(?<timeyear>[\d:]{4,5})" + //# Time or year \n
- @"\s+" + //# Whitespace \n
- @"(?<filename>(.*))" + //# Filename \n
- @"$"; //# End of line
- // On créer une opération Regex pour la mise en forme des données
- Regex regex = new Regex(pattern);
- IFormatProvider culture = CultureInfo.GetCultureInfo("en-us");
- // On créer un fichier pour indiquer au launcher que l'updater check les fichiers
- File.Create(System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + @"\Pacifique Life\check.a3").Close();
- // Tant qu'il y a des fichiers à lire
- while (!streamReader.EndOfStream)
- {
- string line = streamReader.ReadLine();
- // On met en forme la récup des données
- Match match = regex.Match(line);
- //DateTime modified = new DateTime(int.Parse(match.Groups["timeyear"].Value), int.Parse(match.Groups["month"].Value), int.Parse(match.Groups["day"].Value));
- //DateTime modified = DateTime.Now;
- //if (match.Groups["timeyear"].Value.IndexOf(":") < 0)
- // modified = DateTime.Parse((match.Groups["day"].Value) + "-" + (match.Groups["month"].Value) + "-" + (match.Groups["timeyear"].Value));
- // On affecte le size à un long
- sizeAddons = long.Parse(match.Groups["size"].Value);
- // On affecte le nom du fichier à un string
- string name = match.Groups["filename"].Value;
- // Création du tableau à 2 dimensions
- string[] strArrFileInfoFtp = new string[2];
- // On classe le filename dans la 1er dimension du tableau
- strArrFileInfoFtp[0] = match.Groups["filename"].Value;
- // On classe le size dans la 2e dimension du tableau
- strArrFileInfoFtp[1] = match.Groups["size"].Value;
- strListFileNameFtp.Add(strArrFileInfoFtp);
- int ftpListNumbers = strListFileNameFtp.Count / 2;
- checkFTPAddons.Text = ftpListNumbers.ToString();
- }
- request = null;
- streamReader = null;
- // On créer une liste de tous les fichiers présent en local
- List<string[]> strListFileNameLocal = new List<string[]>();
- // On spécifie le directory pour comparer les fichiers en local des fichiers sur le FTP
- DirectoryInfo dir = new DirectoryInfo(File.ReadAllText(System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + @"\Pacifique Life\mod_directory.a3") + @"\@PacificLife\addons\");
- FileInfo[] fichiers = dir.GetFiles();
- addonsCheck = true;
- if (addonsCheck == true)
- {
- statusAddons.Text = "Check des fichiers...";
- }
- // On fait en foreach des fichiers et on les classe dans des tableau
- foreach (FileInfo file in fichiers)
- {
- // Création du tableau à 2 dimension
- string[] strArrFileInfoLocal = new string[2];
- // On classe le nom du fichier dans la 1er dimension
- strArrFileInfoLocal[0] = file.Name;
- // On classe la size du fichier dans la 2e dimensions
- strArrFileInfoLocal[1] = file.Length.ToString();
- strListFileNameLocal.Add(strArrFileInfoLocal);
- int localListNumbers = strListFileNameLocal.Count / 2;
- checkLocalAddons.Text = localListNumbers.ToString();
- }
- // On fait un foreach pour écrire dans la console les fichiers qui se trouve en local
- foreach (string[] arr in strListFileNameLocal)
- {
- bool blnExist = false;
- foreach (string[] FTPfiles in strListFileNameFtp)
- {
- if (arr[0] == FTPfiles[0])
- blnExist = true;
- fileAddons.Text = string.Format("File: {0}", arr[0]);
- }
- // Si un fichier existe pas sur le ftp on le delete
- if (!blnExist)
- {
- FileInfo fInfo = new FileInfo(dir.FullName + arr[0]);
- fInfo.Delete();
- specialAddons.Text = string.Format("Suppression de {0}", arr[0]);
- }
- }
- addonsDownload = true;
- if (addonsDownload == true)
- {
- checkLocalAddons.Text = "Téléchargement de fichiers...";
- }
- // On fait un foreach pour comparer les fichier en local et sur le FTP et on les télécharge
- foreach (string[] files in strListFileNameFtp)
- {
- fileCheck = 1;
- long fileTotal = ++fileCheck;
- string strFileTotal = fileTotal.ToString();
- fileAddons.Text = string.Format("Fichiers Check: {0}",strFileTotal);
- // On cherche les fichiers en local
- FileInfo fInfo = new FileInfo(dir.FullName + files[0]);
- // Si le fichier en local n'existe pas on le télécharge
- if (!fInfo.Exists && files[1] != "0")
- {
- // On convertis la taille du fichier sur le FTP en string
- string strSize = files[1].ToString();
- fileAddons.Text = string.Format("Téléchargement de {0}", files[0]);
- // On télécharge le fichier
- DownloadAddons(files[0]);
- // On affiche un message
- specialAddons.Text = string.Format("{0} a été téléchargé", files[0]);
- progressbarGeneral.Value = strListFileNameLocal.Count / strListFileNameFtp.Count;
- }
- else if (files[1] != "0")
- // Si le fichier existe en local mais est différent niveau taille à celui du FTP alors on le télécharge
- if (fInfo.Length != long.Parse(files[1]))
- {
- // On convertis la taille du fichier sur le FTP en string
- string strSize = files[1].ToString();
- fileAddons.Text = string.Format("Téléchargement de {0}", files[0]);
- // On télécharge le fichier
- DownloadAddons(files[0]);
- // On affiche un message
- specialAddons.Text = string.Format("{0} a été téléchargé", files[0]);
- progressbarGeneral.Value = strListFileNameLocal.Count / strListFileNameFtp.Count;
- }
- fileCheck = 0;
- }
- statusAddons.Text = "Finis !";
- fileAddons.Text = "";
- specialAddons.Text = "";
- }
- public void DownloadAddons(string file)
- {
- try
- {
- // On récup l'adresse du FTP dans les string en haut
- string uri = url + file;
- Uri serverUri = new Uri(uri);
- if (serverUri.Scheme != Uri.UriSchemeFtp)
- {
- return;
- }
- // On créer la requête
- FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url + file);
- request.UseBinary = true;
- request.Method = WebRequestMethods.Ftp.DownloadFile;
- request.Credentials = new NetworkCredential(ftpUserName, ftpPassWord);
- request.KeepAlive = false;
- request.UsePassive = true;
- FtpWebResponse response = (FtpWebResponse)request.GetResponse();
- Stream responseStream = response.GetResponseStream();
- FileStream writeStream = new FileStream(localDestnDir + @"\@PacificLife\addons\" + file, FileMode.Create);
- int Length = 2048;
- Byte[] buffer = new Byte[Length];
- int bytesRead = responseStream.Read(buffer, 0, Length);
- while (bytesRead > 0)
- {
- // On écrit le fichier
- writeStream.Write(buffer, 0, bytesRead);
- bytesRead = responseStream.Read(buffer, 0, Length);
- // On indique la progression du téléchargement (de façon dégueu mais on l'indique quand même)
- // On récup la taille du fichier qu'on télécharge en local
- FileInfo taille = new FileInfo(localDestnDir + @"\@PacificLife\addons\" + file);
- long tailleLocale = taille.Length;
- // On récup la taille du fichier sur le FTP dans le fichier où on l'avait écrit
- long tailleFtp = sizeAddons;
- // On fait notre opération sur le pourcentage
- long percent = tailleLocale * 100 / tailleFtp;
- string strPercent = percent.ToString();
- progressbarAddons.Value = int.Parse(strPercent);
- }
- // On ferme l'écriture du fichier
- writeStream.Close();
- response.Close();
- }
- // On gère nos exceptions
- catch (WebException wEx)
- {
- MessageBox.Show(wEx.Message, "Download Error");
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message, "Download Error");
- }
- }
- private void MainWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
- {
- // Création de la requête pour récup les fichiers
- FtpWebRequest request2 = (FtpWebRequest)WebRequest.Create("ftp://51.255.96.243/");
- request2.Credentials = new NetworkCredential("Launcher", "FybFYRwPo3y#");
- request2.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
- // On lit la liste des fichiers
- StreamReader streamReader2 = new StreamReader(request2.GetResponse().GetResponseStream());
- string fileNameMain = streamReader2.ReadLine();
- // On créer une liste de tous les fichiers présent sur le FTP
- List<string[]> strListFileNameFtpMain = new List<string[]>();
- // String pour récup les infos
- string pattern =
- @"^" + //# Start of line
- @"(?<dir>[\-ld])" + //# File size
- @"(?<permission>[\-rwx]{9})" + //# Whitespace \n
- @"\s+" + //# Whitespace \n
- @"(?<filecode>\d+)" +
- @"\s+" + //# Whitespace \n
- @"(?<owner>\w+)" +
- @"\s+" + //# Whitespace \n
- @"(?<group>\w+)" +
- @"\s+" + //# Whitespace \n
- @"(?<size>\d+)" +
- @"\s+" + //# Whitespace \n
- @"(?<month>\w{3})" + //# Month (3 letters) \n
- @"\s+" + //# Whitespace \n
- @"(?<day>\d{1,2})" + //# Day (1 or 2 digits) \n
- @"\s+" + //# Whitespace \n
- @"(?<timeyear>[\d:]{4,5})" + //# Time or year \n
- @"\s+" + //# Whitespace \n
- @"(?<filename>(.*))" + //# Filename \n
- @"$"; //# End of line
- // On créer une opération Regex pour la mise en forme des données
- Regex regex = new Regex(pattern);
- IFormatProvider culture = CultureInfo.GetCultureInfo("en-us");
- // On créer un fichier pour indiquer au launcher que l'updater check les fichiers
- File.Create(System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + @"\Pacifique Life\check.a3").Close();
- // Tant qu'il y a des fichiers à lire
- while (!streamReader2.EndOfStream)
- {
- string line = streamReader2.ReadLine();
- // On met en forme la récup des données
- Match match = regex.Match(line);
- //DateTime modified = new DateTime(int.Parse(match.Groups["timeyear"].Value), int.Parse(match.Groups["month"].Value), int.Parse(match.Groups["day"].Value));
- //DateTime modified = DateTime.Now;
- //if (match.Groups["timeyear"].Value.IndexOf(":") < 0)
- // modified = DateTime.Parse((match.Groups["day"].Value) + "-" + (match.Groups["month"].Value) + "-" + (match.Groups["timeyear"].Value));
- // On affecte le size à un long
- sizeMain = long.Parse(match.Groups["size"].Value);
- // On affecte le nom du fichier à un string
- string name = match.Groups["filename"].Value;
- // Création du tableau à 2 dimensions
- string[] strArrFileInfoFtpMain = new string[2];
- // On classe le filename dans la 1er dimension du tableau
- strArrFileInfoFtpMain[0] = match.Groups["filename"].Value;
- // On classe le size dans la 2e dimension du tableau
- strArrFileInfoFtpMain[1] = match.Groups["size"].Value;
- strListFileNameFtpMain.Add(strArrFileInfoFtpMain);
- int ftpListNumbersMain = strListFileNameFtpMain.Count / 2;
- checkFTPMain.Text = ftpListNumbersMain.ToString();
- }
- request2 = null;
- streamReader2 = null;
- // On créer une liste de tous les fichiers présent en local
- List<string[]> strListFileNameLocalMain = new List<string[]>();
- // On spécifie le directory pour comparer les fichiers en local des fichiers sur le FTP
- DirectoryInfo dir = new DirectoryInfo(File.ReadAllText(System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + @"\Pacifique Life\mod_directory.a3") + @"\@PacificLife\");
- FileInfo[] fichiers = dir.GetFiles();
- mainCheck = true;
- if (mainCheck == true)
- {
- statusMain.Text = "Check des fichiers...";
- }
- // On fait en foreach des fichiers et on les classe dans des tableau
- foreach (FileInfo file in fichiers)
- {
- // Création du tableau à 2 dimension
- string[] strArrFileInfoLocalMain = new string[2];
- // On classe le nom du fichier dans la 1er dimension
- strArrFileInfoLocalMain[0] = file.Name;
- // On classe la size du fichier dans la 2e dimensions
- strArrFileInfoLocalMain[1] = file.Length.ToString();
- strListFileNameLocalMain.Add(strArrFileInfoLocalMain);
- int localListNumbers = strListFileNameLocalMain.Count / 2;
- checkLocalMain.Text = localListNumbers.ToString();
- }
- // On fait un foreach pour écrire dans la console les fichiers qui se trouve en local
- foreach (string[] arr in strListFileNameLocalMain)
- {
- bool blnExist = false;
- foreach (string[] FTPfiles in strListFileNameFtpMain)
- {
- if (arr[0] == FTPfiles[0])
- blnExist = true;
- fileMain.Text = string.Format("File: {0}", arr[0]);
- }
- // Si un fichier existe pas sur le ftp on le delete
- if (!blnExist)
- {
- FileInfo fInfo = new FileInfo(dir.FullName + arr[0]);
- fInfo.Delete();
- specialMain.Text = string.Format("Suppression de {0}", arr[0]);
- }
- }
- mainDownload = true;
- if (mainDownload == true)
- {
- checkLocalMain.Text = "Téléchargement de fichiers...";
- }
- // On fait un foreach pour comparer les fichier en local et sur le FTP et on les télécharge
- foreach (string[] files in strListFileNameFtpMain)
- {
- fileCheck = 1;
- long fileTotalMain = ++fileCheckMain;
- string strFileTotalMain = fileTotalMain.ToString();
- checkMain.Text = string.Format("Fichiers Check: {0}", strFileTotalMain);
- // On cherche les fichiers en local
- FileInfo fInfo = new FileInfo(dir.FullName + files[0]);
- // Si le fichier en local n'existe pas on le télécharge
- if (!fInfo.Exists && files[1] != "0")
- {
- // On convertis la taille du fichier sur le FTP en string
- string strSize = files[1].ToString();
- fileMain.Text = string.Format("Téléchargement de {0}", files[0]);
- // On télécharge le fichier
- DownloadMain(files[0]);
- // On affiche un message
- specialMain.Text = string.Format("{0} a été téléchargé", files[0]);
- }
- else if (files[1] != "0")
- // Si le fichier existe en local mais est différent niveau taille à celui du FTP alors on le télécharge
- if (fInfo.Length != long.Parse(files[1]))
- {
- // On convertis la taille du fichier sur le FTP en string
- string strSize = files[1].ToString();
- fileMain.Text = string.Format("Téléchargement de {0}", files[0]);
- // On télécharge le fichier
- DownloadMain(files[0]);
- // On affiche un message
- specialMain.Text = string.Format("{0} a été téléchargé", files[0]);
- }
- fileCheckMain = 0;
- }
- statusMain.Text = "Finis !";
- fileMain.Text = "";
- specialMain.Text = "";
- }
- public void DownloadMain(string file)
- {
- try
- {
- // On récup l'adresse du FTP dans les string en haut
- string uri2 = url2 + file;
- Uri serverUri = new Uri(uri2);
- if (serverUri.Scheme != Uri.UriSchemeFtp)
- {
- return;
- }
- // On créer la requête
- FtpWebRequest request2 = (FtpWebRequest)WebRequest.Create(url + file);
- request2.UseBinary = true;
- request2.Method = WebRequestMethods.Ftp.DownloadFile;
- request2.Credentials = new NetworkCredential(ftpUserName, ftpPassWord);
- request2.KeepAlive = false;
- request2.UsePassive = true;
- FtpWebResponse response2 = (FtpWebResponse)request2.GetResponse();
- Stream responseStream2 = response2.GetResponseStream();
- FileStream writeStream2 = new FileStream(localDestnDir + @"\@PacificLife\addons\" + file, FileMode.Create);
- int Length = 2048;
- Byte[] buffer = new Byte[Length];
- int bytesRead = responseStream2.Read(buffer, 0, Length);
- while (bytesRead > 0)
- {
- // On écrit le fichier
- writeStream2.Write(buffer, 0, bytesRead);
- bytesRead = responseStream2.Read(buffer, 0, Length);
- // On indique la progression du téléchargement (de façon dégueu mais on l'indique quand même)
- // On récup la taille du fichier qu'on télécharge en local
- FileInfo tailleMain = new FileInfo(localDestnDir + @"\@PacificLife\addons\" + file);
- long tailleLocaleMain = tailleMain.Length;
- // On récup la taille du fichier sur le FTP dans le fichier où on l'avait écrit
- long tailleFtpMain = sizeMain;
- // On fait notre opération sur le pourcentage
- long percent = tailleLocaleMain * 100 / tailleFtpMain;
- string strPercent = percent.ToString();
- progressbarMain.Value = int.Parse(strPercent);
- }
- // On ferme l'écriture du fichier
- writeStream2.Close();
- response2.Close();
- }
- // On gère nos exceptions
- catch (WebException wEx)
- {
- MessageBox.Show(wEx.Message, "Download Error");
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message, "Download Error");
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement