public static List <ManifestVersion> ReloadAvailableVersions() { try { string mainDir = SettingsControl.MainDirectory; string content; using (StreamReader reader = new StreamReader(DownloadUtils.DownloadToStream(Constants.URL_VERSIONS_MANIFEST))) { content = reader.ReadToEnd(); } RootVersionsManifest versionsManifestJsnon = JsonConvert.DeserializeObject <RootVersionsManifest>(content); if (!Directory.Exists(mainDir)) { Directory.CreateDirectory(mainDir); } if (!File.Exists(mainDir + "\\version_manifest.json")) { WriteVersionsManifest(JsonConvert.SerializeObject(versionsManifestJsnon, Formatting.Indented)); } else { string input = ""; using (FileStream fileStream = new FileStream(mainDir + "\\version_manifest.json", FileMode.Open, FileAccess.Read, FileShare.Read)) { using (StreamReader reader = new StreamReader(fileStream, Encoding.ASCII)) { input = reader.ReadToEnd(); } } if (versionsManifestJsnon != JsonConvert.DeserializeObject <RootVersionsManifest>(input)) { WriteVersionsManifest(JsonConvert.SerializeObject(versionsManifestJsnon, Formatting.Indented)); } } List <ManifestVersion> allVersions = versionsManifestJsnon.versions; allVersions.Reverse(); return(allVersions); } catch { return(new List <ManifestVersion>()); } }
public bool DownloadVersion(string newDownloadVersion) { ResetTempVariables(); downloadVersion = newDownloadVersion; string content = ""; bool downloaded = false; RootVersionsManifest versionsManifest = null; try { string mainDir = SettingsControl.MainDirectory; if (!File.Exists(mainDir + "\\version_manifest.json")) { DownloadUtils.DownloadFile(Constants.URL_VERSIONS_MANIFEST, mainDir + "\\version_manifest.json"); } versionsManifest = JsonConvert.DeserializeObject <RootVersionsManifest>(File.ReadAllText(mainDir + "\\version_manifest.json")); } catch (Exception ex) { MessageBox.Show(string.Format(Messages.ERROR_READ_FILE_F, "version_manifest.json") + ex.Message, Messages.CAPTION_COMMON); return(false); } ManifestVersion versionManifest = null; try { versionManifest = versionsManifest.versions.Where(x => x.id == downloadVersion).First(); if (versionManifest == null) { MessageBox.Show(string.Format(Messages.ERROR_GET_VERSION_FROM_MANIFEST_F, downloadVersion), Messages.CAPTION_COMMON); return(false); } } catch (Exception ex) { MessageBox.Show(string.Format(Messages.ERROR_GET_VERSION_FROM_MANIFEST_F, downloadVersion) + ex.Message, Messages.CAPTION_COMMON); return(false); } try { using (StreamReader reader = new StreamReader(DownloadUtils.DownloadToStream(versionManifest.url))) { content = reader.ReadToEnd(); } } catch (Exception ex) { MessageBox.Show(Messages.ERROR_GET_VERSION_JSON + ex.Message, Messages.CAPTION_COMMON); return(false); } RootGameVersion versionJsnon = null; try { versionJsnon = JsonConvert.DeserializeObject <RootGameVersion>(content); } catch (Exception ex) { MessageBox.Show(string.Format(Messages.ERROR_READ_FILE_F, downloadVersion + ".json") + ex.Message, Messages.CAPTION_COMMON); return(false); } SetTotalBytesToDownload(versionJsnon); StartDownloadFilesFromQueue(Environment.ProcessorCount); Task getAssetsUrls = Task.Factory.StartNew(new Action(() => GetAssetsUrls(versionJsnon)), cancellationTokenSource.Token); getAssetsUrls.Start(); Task getLibrariesUrls = Task.Factory.StartNew(new Action(() => GetLibrariesUrls(versionJsnon)), cancellationTokenSource.Token); getLibrariesUrls.Start(); Task getMainFilesUrls = Task.Factory.StartNew(new Action(() => GetMainFilesUrls(versionJsnon, versionManifest.url)), cancellationTokenSource.Token); getMainFilesUrls.Start(); if (WaitTasks(new Task[] { getAssetsUrls, getLibrariesUrls, getMainFilesUrls }, -1)) { downloadQueue.Enqueue(null); if (WaitCurrentDownloadTasks(-1)) { downloaded = true; } } ResetTempVariables(); GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); return(downloaded); }