using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.IO; using System.IO.Compression; using System.Net.Sockets; using System.Threading; namespace GamerService_Updater { public partial class Form1 : Form { #region structs public struct afile{ public int action; public string path; public string rev; } #endregion #region fncs public void MakeFolder(string path){ List folders = String_Explode(path, "/"); string curdir = System.IO.Directory.GetCurrentDirectory(); while(folders.Count > 0){ curdir += "/" + folders[0]; if (!System.IO.Directory.Exists(curdir)) System.IO.Directory.CreateDirectory(path); folders.RemoveAt(0); } } public List String_Explode(string text, string spliter){ List returnz = new List(); for (int i = 0; i < text.Length - spliter.Length; i++){ while (text.Substring(i, spliter.Length) == spliter){ returnz.Add(text.Substring(0, i)); text = text.Substring(i + spliter.Length, text.Length - i - spliter.Length); i = 0; if (text.Length == 0)return returnz; } } if (text.Length > 0){ returnz.Add(text.Substring(0, text.Length)); } return returnz; } public string String_Implode(List Data, string spliter){ string returnz = ""; foreach (string a in Data) returnz += a + spliter; if (returnz == "") return ""; return returnz.Substring(0, returnz.Length - spliter.Length); } #endregion public class DownloadInfo { public string Path; public string URL; public string Version; public int GameID; public int TotalActions; public byte Action; } public List FilesToDownload; public List files = new List(); public string Curversion = "0"; public string NewVersion = ""; public string Ip = ""; public int Port = 0; public Form1() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; MrAG.Config.Read("config.gs"); Curversion = MrAG.Config.Value_Get("Main", "Version", "0.0.0.0"); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { System.Diagnostics.Process.GetCurrentProcess().Close(); } System.Net.WebClient client; string currenthandelingrev; private void DoUpdate(){ this.timer1.Enabled = true; client = new WebClient(); client.Proxy = null; string[] FileData = null; int actions = 0; try { FileData = new StreamReader(client.OpenRead("http://" + "gs.mrag.nl/download.php?gid=-1&file=version.txt")).ReadToEnd().Replace("\r", "").Split('\n'); } catch(Exception e) { return; } FilesToDownload = new List(); lock (FilesToDownload) { currenthandelingrev = ""; List filesdone = new List(); foreach (string line in FileData){ if (line.Length > 0) { string[] args = null; if (line.Contains("=")) args = line.Split('='); if (line.TrimStart('\t', ' ').StartsWith("#")){ }else if (args[0] == "VER"){ if (currenthandelingrev.Length == 0){ currenthandelingrev = args[1]; } if (args[1] == Curversion) { break; } }else{ if (!filesdone.Contains(args[1])) { filesdone.Add(args[1]); DownloadInfo info = new DownloadInfo(); info.Action = 0; info.URL = "http://" + "gs.mrag.nl/download.php?gid=-1&file=" + args[1]; info.Path = args[1]; switch (args[0]) { case "ADD": info.Action = 0; break; case "MNF": info.Action = 1; break; case "DEL": info.Action = 2; break; case "MDR": info.Action = 3; break; } FilesToDownload.Add(info); actions++; } } } } for (int i = FilesToDownload.Count - 1; i > 0; i--) { FilesToDownload[i].TotalActions = actions; } if (FilesToDownload.Count != 0) new Thread(new ThreadStart(DoDownloads)).Start(); else { MessageBox.Show("No updates :D", "Newest version"); Application.Exit(); } } } private void DoDownloads() { while (FilesToDownload.Count > 0) { DownloadInfo info = FilesToDownload[0]; switch (info.Action) { case 0: int failsafe = 0; if (File.Exists(info.Path)){ while (failsafe < 50) { failsafe++; try{ File.Delete(info.Path); break; }catch{ } } } if (failsafe > 49) { MessageBox.Show("Fatal error while trying to remove old file: " + info.Path + "\nPlease do this remotely!", "FATAL ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); return; } client.DownloadFile(new Uri(info.URL.Replace("\\", "/")), info.Path); break; case 1: if (File.Exists(info.Path)) File.Delete(info.Path); File.Create(info.Path); break; case 2: if (Directory.Exists(info.Path)) Directory.Delete(info.Path, true); if (File.Exists(info.Path)) File.Delete(info.Path); break; case 3: if (Directory.Exists(info.Path)) Directory.Delete(info.Path, true); Directory.CreateDirectory(info.Path); break; } FilesToDownload.RemoveAt(0); } MrAG.Config.Value_Set("Main", "Version", currenthandelingrev); MrAG.Config.Write("config.gs"); Application.Exit(); System.Diagnostics.Process.Start("GamerServices.exe"); } List> cblist = new List>(); private void Form1_Load(object sender, EventArgs e) { int currow = 0; foreach(CheckBox cb in this.Controls){ if (cb.Checked) { if (cb.Location.Y != currow) { cblist.Add(new List()); } cblist[cblist.Count - 1].Add(cb); cb.Checked = false; } } DoUpdate(); } private byte timeranimation = 0; private bool kak = true; private void timer1_Tick(object sender, EventArgs e) { foreach (CheckBox cb in cblist[timeranimation]) { cb.Checked = kak; } timeranimation++; if (timeranimation > cblist.Count - 1) { timeranimation = 0; kak = !kak; } } } }