public void Clear() { CDNIndexData.Clear(); CDNIndexData = null; CASCConfig = null; downloader = null; }
private CASCEngine(CASCConfig config) { Config = config; Log.Write("CASC: Loading indexes..."); CDNIndex = CDNIndexHandler.Initialize(config); Log.Write("CASC: Loaded {0} indexes", CDNIndex.Count); if (!Program.Settings.UseRemote) { CDNIndexHandler.Cache.Enabled = false; Log.Write("CASC: Loading indexes from local storage..."); LocalIndex = LocalIndexHandler.Initialize(config); Log.Write("CASC: Loaded {0} indexes from local storage", LocalIndex.Count); } EventManager.Trigger_LoadStepDone(); Log.Write("CASC: Loading encoding data..."); using (var stream = OpenEncodingFile(this)) EncodingHandler = new EncodingHandler(stream); Log.Write("CASC: Loaded {0} encoding data entries", EncodingHandler.Count); if ((CASCConfig.LoadFlags & LoadFlags.Download) != 0) { Log.Write("CASC: Loading download data..."); using (var stream = OpenDownloadFile(EncodingHandler, this)) DownloadHandler = new DownloadHandler(stream); Log.Write("CASC: Loaded {0} download data entries", EncodingHandler.Count); } EventManager.Trigger_LoadStepDone(); Log.Write("CASC: Loading root data..."); using (var stream = OpenRootFile(EncodingHandler, this)) RootHandler = new RootHandler(stream); Log.Write("CASC: Loaded {0} root data entries", RootHandler.Count); if ((CASCConfig.LoadFlags & LoadFlags.Install) != 0) { Log.Write("CASC: Loading install data..."); using (var stream = OpenInstallFile(EncodingHandler, this)) InstallHandler = new InstallHandler(stream); Log.Write("CASC: Loaded {0} install data entries", InstallHandler.Count); } EventManager.Trigger_LoadStepDone(); }
public static Stream OpenConfigFileDirect(CASCConfig cfg, string key) { string file = Program.Settings.RemoteHostPath + "/config/" + key.Substring(0, 2) + "/" + key.Substring(2, 2) + "/" + key; string url = string.Format("http://{0}/{1}", Program.Settings.RemoteHost, file); Stream stream = Cache.OpenFile(file, url, false); if (stream != null) return stream; return OpenFileDirect(url); }
private static List<string> GetIdxFiles(CASCConfig config) { List<string> latestIdx = new List<string>(); string dataPath = Path.Combine(Program.Settings.WoWDirectory, @"Data\data"); for (int i = 0; i < 0x10; ++i) { var files = Directory.EnumerateFiles(dataPath, String.Format("{0:X2}*.idx", i)); if (files.Count() > 0) latestIdx.Add(files.Last()); } return latestIdx; }
public static LocalIndexHandler Initialize(CASCConfig config) { LocalIndexHandler handler = new LocalIndexHandler(); List<string> idxFiles = GetIdxFiles(config); if (idxFiles.Count == 0) throw new FileNotFoundException("idx files missing!"); foreach (string idx in idxFiles) handler.ParseIndex(idx); Log.Write("CASC: LocalIndexHandler loaded {0} indexes", handler.Count); return handler; }
public static CDNIndexHandler Initialize(CASCConfig config) { CDNIndexHandler handler = new CDNIndexHandler(config); for (int i = 0; i < config.Archives.Count; i++) { string archive = config.Archives[i]; if (Program.Settings.UseRemote) handler.DownloadIndexFile(archive, i); else handler.OpenIndexFile(archive, i); } return handler; }
private CDNIndexHandler(CASCConfig cascConfig) { CASCConfig = cascConfig; downloader = new SyncDownloader(); }
public static CASCEngine OpenStorage(CASCConfig config) => Open(config);
private static CASCEngine Open(CASCConfig config) { return new CASCEngine(config); }
public static CASCConfig LoadOnlineStorageConfig() { var config = new CASCConfig(); string usingRegion = null; try { usingRegion = Constants.CDN_REGIONS[0]; using (var stream = CDNIndexHandler.OpenFileDirect(string.Format(Constants.CDN_CONFIG_URL, usingRegion))) config.CDNData = VerBarConfig.ReadVerBarConfig(stream); using (Stream stream = CDNIndexHandler.OpenFileDirect(string.Format(Constants.CDN_VERSION_URL, usingRegion))) config.VersionsData = VerBarConfig.ReadVerBarConfig(stream); } catch { usingRegion = Constants.CDN_REGIONS[1]; using (var stream = CDNIndexHandler.OpenFileDirect(string.Format(Constants.CDN_CONFIG_URL, usingRegion))) config.CDNData = VerBarConfig.ReadVerBarConfig(stream); using (Stream stream = CDNIndexHandler.OpenFileDirect(string.Format(Constants.CDN_VERSION_URL, usingRegion))) config.VersionsData = VerBarConfig.ReadVerBarConfig(stream); } if (usingRegion == null) throw new Exception("Unable to access default CDN servers for config/versioning."); for (int i = 0; i < config.VersionsData.Count; i++) { if (config.VersionsData[i]["Region"] == usingRegion) { config.versionIndex = i; break; } } string cdnKey = config.VersionsData[config.versionIndex]["CDNConfig"]; using (Stream stream = CDNIndexHandler.OpenConfigFileDirect(config, cdnKey)) config.CDNConfig = KeyValueConfig.ReadKeyValueConfig(stream); config.ActiveBuild = 0; config.Builds = new List<KeyValueConfig>(); using (Stream stream = CDNIndexHandler.OpenConfigFileDirect(config, config.VersionsData[config.versionIndex]["BuildConfig"])) { var buildConfig = KeyValueConfig.ReadKeyValueConfig(stream); config.Builds.Add(buildConfig); } return config; }
public static CASCConfig LoadLocalStorageConfig() { var config = new CASCConfig(); string buildInfoPath = Path.Combine(Program.Settings.WoWDirectory, Constants.WOW_BUILD_FILE); using (Stream buildInfoStream = new FileStream(buildInfoPath, FileMode.Open)) config.BuildInfo = VerBarConfig.ReadVerBarConfig(buildInfoStream); Dictionary<string, string> buildInfo = config.GetActiveBuild(); if (buildInfo == null) throw new Exception("BuildInfo missing!"); string configFolder = Path.Combine(Program.Settings.WoWDirectory, @"Data\config"); config.ActiveBuild = 0; config.Builds = new List<KeyValueConfig>(); string buildKey = buildInfo["BuildKey"]; string buildCfgPath = Path.Combine(configFolder, buildKey.Substring(0, 2), buildKey.Substring(2, 2), buildKey); using (Stream stream = new FileStream(buildCfgPath, FileMode.Open)) config.Builds.Add(KeyValueConfig.ReadKeyValueConfig(stream)); string cdnKey = buildInfo["CDNKey"]; string cdnCfgPath = Path.Combine(configFolder, cdnKey.Substring(0, 2), cdnKey.Substring(2, 2), cdnKey); using (Stream stream = new FileStream(cdnCfgPath, FileMode.Open)) config.CDNConfig = KeyValueConfig.ReadKeyValueConfig(stream); return config; }