private void downloadVVer(RemoteVerType ver) { if (ver == null) { MessageBox.Show(LangManager.GetLangFromResource("RemoteVerErrorNoVersionSelect")); return; } TaskListBar taskbar = new TaskListBar() { ImgSrc = new BitmapImage(new Uri("pack://*****:*****@"\versions\"); downpath.Append(selectver).Append("\\"); downpath.Append(selectver).Append(".jar"); if (MeCore.IsServerDedicated) { if (!string.IsNullOrWhiteSpace(MeCore.Config.Server.ClientPath)) { downpath.Replace(MeCore.Config.MCPath, Path.Combine(MeCore.BaseDirectory, MeCore.Config.Server.ClientPath)); } } var downer = new WebClient(); downer.Headers.Add("User-Agent", "MTMCL" + MeCore.version); var downurl = new StringBuilder(MTMCL.Resources.UrlReplacer.getDownloadUrl()); downurl.Append(@"versions\"); downurl.Append(selectver).Append("\\"); downurl.Append(selectver).Append(".jar"); #if DEBUG MessageBox.Show(downpath + "\n" + downurl); #endif if (!Directory.Exists(Path.GetDirectoryName(downpath.ToString()))) { Directory.CreateDirectory(Path.GetDirectoryName(downpath.ToString())); } string downjsonfile = downurl.ToString().Substring(0, downurl.Length - 4) + ".json"; if (!string.IsNullOrWhiteSpace(ver.url) & MeCore.Config.DownloadSource == 0) { downjsonfile = ver.url; } string downjsonpath = downpath.ToString().Substring(0, downpath.Length - 4) + ".json"; try { downer.DownloadFileCompleted += delegate (object sender, AsyncCompletedEventArgs e) { taskbar.log(Logger.HelpLog("Success to download client file.")); taskbar.noticeFinished(); }; downer.DownloadProgressChanged += delegate (object sender, DownloadProgressChangedEventArgs e) { Dispatcher.Invoke(new Action(() => taskbar.setTaskStatus(e.ProgressPercentage + "%"))); }; taskbar.log(Logger.HelpLog("Start download file from url " + downjsonfile)); try { downer.DownloadFile(new Uri(downjsonfile), downjsonpath); } catch (Exception) { taskbar.noticeFailed(); return; } taskbar.log(Logger.HelpLog("Finish downloading file " + downjsonfile)); await TaskEx.Delay(TimeSpan.FromMilliseconds(500)); taskbar.log(Logger.HelpLog(string.Format("Start reading json of version {0} for further downloading", selectver))); var sr = new StreamReader(downjsonpath); VersionJson verjson = JsonConvert.DeserializeObject<VersionJson>(sr.ReadToEnd()); sr.Close(); var sw = new StreamWriter(downjsonpath); sw.Write(JsonConvert.SerializeObject(verjson.Simplify(), Formatting.Indented, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore })); sw.Close(); if (verjson.downloads != null) { if (verjson.downloads.client != null) { if (verjson.downloads.client.url != null) { downurl.Clear().Append(verjson.downloads.client.url); } } } taskbar.log(Logger.HelpLog("Start download file from url " + downurl.ToString())); downer.DownloadFileAsync(new Uri(downurl.ToString()), downpath.ToString()); } catch (Exception ex) { Dispatcher.Invoke(new System.Windows.Forms.MethodInvoker(delegate { Dispatcher.Invoke(new Action(() => MeCore.MainWindow.addNotice(new Notice.CrashErrorBar(string.Format(LangManager.GetLangFromResource("ErrorNameFormat"), DateTime.Now.ToLongTimeString()), ex.ToWellKnownExceptionString()) { ImgSrc = new BitmapImage(new Uri("pack://application:,,,/Resources/error-banner.jpg")) }))); taskbar.noticeFailed(); })); } })); MeCore.MainWindow.addTask("dl-mcclient-" + ver.id, taskbar.setThread(task).setTask(LangManager.GetLangFromResource("TaskDLMC")).setDetectAlive(false)); MeCore.MainWindow.addBalloonNotice(new Notice.NoticeBalloon(LangManager.GetLangFromResource("Download"), string.Format(LangManager.GetLangFromResource("BalloonNoticeSTTaskFormat"), LangManager.GetLangFromResource("TaskDLMC")))); }
private void DownloadForge(ForgeVersion ver) { TaskListBar task = new TaskListBar() { ImgSrc = new BitmapImage(new Uri("pack://application:,,,/Resources/download-banner.jpg")) }; var thDL = new Thread(new ThreadStart(delegate { bool universalInstead = !ver.urls.ContainsKey("installer"); bool clientInstead = universalInstead & !ver.urls.ContainsKey("universal"); var url = new Uri(clientInstead ? ver.urls["client"] : universalInstead ? ver.urls["universal"] : ver.urls["installer"]); var downer = new WebClient(); downer.Headers.Add("User-Agent", "MTMCL" + MeCore.version); var filename = !universalInstead ? "forge.jar" : "forge.zip"; var filecount = 0; while (File.Exists(filename)) { ++filecount; filename = "forge-" + filecount + (!universalInstead ? ".jar" : ".zip"); } downer.DownloadProgressChanged += delegate (object sender, DownloadProgressChangedEventArgs e) { MeCore.Invoke(new Action(() => task.setTaskStatus(string.Format(LangManager.GetLangFromResource("SubTaskDLForge"), e.ProgressPercentage)))); }; downer.DownloadFileCompleted += delegate (object sender, AsyncCompletedEventArgs e) { try { task.log(Logger.HelpLog("Trying to install forge")); MeCore.Invoke(new Action(() => task.setTaskStatus(LangManager.GetLangFromResource("SubTaskInstallForge")))); if (universalInstead) new ForgeInstaller().installOld(filename, ver.mcversion, "forge-" + ver.mcversion + "-" + ver.version + (!string.IsNullOrWhiteSpace(ver.branch) ? "-" + ver.branch : "")); else new ForgeInstaller().install(filename); File.Delete(filename); task.log(Logger.HelpLog("Installation finished")); MeCore.Invoke(new Action(() => task.setTaskStatus(LangManager.GetLangFromResource("TaskFinish")))); task.noticeFinished(); } catch (Exception ex) { task.log(Logger.HelpLog("Installation failed")); Logger.log(ex); task.noticeFailed(); } }; task.log(Logger.HelpLog("Start downloading forge installer")); MeCore.Invoke(new Action(() => task.setTaskStatus(string.Format(LangManager.GetLangFromResource("SubTaskDLForge"), "0")))); downer.DownloadFileAsync(url, filename); })); MeCore.MainWindow.addTask("dl-instl-forgeclient-" + ver, task.setThread(thDL).setTask(LangManager.GetLangFromResource("TaskInstallForge")).setDetectAlive(false)); MeCore.MainWindow.addBalloonNotice(new Notice.NoticeBalloon(LangManager.GetLangFromResource("Download"), string.Format(LangManager.GetLangFromResource("BalloonNoticeSTTaskFormat"), LangManager.GetLangFromResource("TaskInstallMC")))); }
private void butRDLAsset_Click(object sender, RoutedEventArgs e) { TaskListBar task = new TaskListBar() { ImgSrc = new BitmapImage(new Uri("pack://*****:*****@"\assets\objects\" + entity.Value.hash.Substring(0, 2) + "\\" + entity.Value.hash; if (MeCore.IsServerDedicated) { if (!string.IsNullOrWhiteSpace(MeCore.Config.Server.ClientPath)) { file = file.Replace(MeCore.Config.MCPath, Path.Combine(MeCore.BaseDirectory, MeCore.Config.Server.ClientPath)); } } FileHelper.CreateDirectoryForFile(file); try { if (FileHelper.IfFileVaild(file, entity.Value.size)) { task.log(Logger.HelpLog(string.Format("{0} exists, delete it", entity.Key))); File.Delete(file); } task.log(Logger.HelpLog(string.Format("Start downloading {0}", entity.Key))); _downer.DownloadFile(new Uri(url), file); task.log(Logger.HelpLog(string.Format("Finish downloading {0}, Progress {1}", entity.Key, i.ToString(CultureInfo.InvariantCulture) + "/" + assets.objects.Count.ToString(CultureInfo.InvariantCulture)))); //Logger.log(i.ToString(CultureInfo.InvariantCulture), "/", assets.objects.Count.ToString(CultureInfo.InvariantCulture), file.Substring(MeCore.Config.MCPath.Length), "下载完毕"); if (i == assets.objects.Count) { Dispatcher.Invoke(new System.Windows.Forms.MethodInvoker(delegate { task.log(Logger.HelpLog("Finish redownloading assets")); //Logger.log("assets重新下载完毕"); })); } } catch (WebException ex) { Dispatcher.Invoke(new System.Windows.Forms.MethodInvoker(delegate { Logger.log(ex.Response.ResponseUri.ToString()); Logger.error(ex); })); } } })); MeCore.MainWindow.addTask("dl-assets", task.setThread(thGet).setTask(LangManager.GetLangFromResource("TaskRDLAssets"))); }