private CASCHandlerLite(CASCConfig config, LocaleFlags locale, BackgroundWorkerEx worker) : base(config, worker) { if (config.GameType != CASCGameType.WoW) throw new Exception("Unsupported game " + config.BuildUID); Logger.WriteLine("CASCHandlerLite: loading encoding data..."); EncodingHandler EncodingHandler; using (var _ = new PerfCounter("new EncodingHandler()")) { using (var fs = OpenEncodingFile(this)) EncodingHandler = new EncodingHandler(fs, worker); } Logger.WriteLine("CASCHandlerLite: loaded {0} encoding data", EncodingHandler.Count); Logger.WriteLine("CASCHandlerLite: loading root data..."); RootHandlerBase RootHandler; using (var _ = new PerfCounter("new RootHandler()")) { using (var fs = OpenRootFile(EncodingHandler, this)) RootHandler = new WowRootHandler(fs, worker); } Logger.WriteLine("CASCHandlerLite: loaded {0} root data", RootHandler.Count); RootHandler.SetFlags(locale, ContentFlags.None, false); RootEntry rootEntry; foreach (var entry in RootHandler.GetAllEntries()) { rootEntry = entry.Value; if ((rootEntry.Block.LocaleFlags == locale || (rootEntry.Block.LocaleFlags & locale) != LocaleFlags.None) && (rootEntry.Block.ContentFlags & ContentFlags.LowViolence) == ContentFlags.None) { var enc = EncodingHandler.GetEntry(rootEntry.MD5); if (enc != null) { if (!HashToKey.ContainsKey(entry.Key)) { HashToKey.Add(entry.Key, enc.Key); FileDataIdToHash.Add(rootEntry.FileDataId, entry.Key); } } } } RootHandler.Clear(); EncodingHandler.Clear(); RootHandler = null; EncodingHandler = null; GC.Collect(); Logger.WriteLine("CASCHandlerLite: loaded {0} files", HashToKey.Count); }
public void Clear() { CDNIndex?.Clear(); CDNIndex = null; foreach (var stream in DataStreams) { stream.Value.Dispose(); } DataStreams.Clear(); EncodingHandler?.Clear(); EncodingHandler = null; InstallHandler?.Clear(); InstallHandler = null; LocalIndex?.Clear(); LocalIndex = null; RootHandler?.Clear(); RootHandler = null; DownloadHandler?.Clear(); DownloadHandler = null; }
protected BinaryReader OpenRootFile(EncodingHandler enc, CASCHandlerBase casc) { if (!enc.GetEntry(casc.Config.RootMD5, out EncodingEntry encInfo)) { throw new FileNotFoundException("encoding info for root file missing!"); } //ExtractFile(encInfo.Key, ".", "root"); return(new BinaryReader(casc.OpenFile(encInfo.Key))); }
protected BinaryReader OpenDownloadFile(EncodingHandler enc, CASCHandlerBase casc) { var encInfo = enc.GetEntry(casc.Config.DownloadMD5); if (encInfo == null) { throw new FileNotFoundException("encoding info for download file missing!"); } //ExtractFile(encInfo.Key, ".", "download"); return(new BinaryReader(casc.OpenFile(encInfo.Key))); }
protected static BinaryReader OpenInstallFile(EncodingHandler enc, CASCHandlerBase casc) { var encInfo = enc.GetEntry(casc.Config.InstallMD5); if (encInfo == null) { throw new FileNotFoundException("encoding info for install file missing!"); } //ExtractFile(encInfo.Key, ".", "install"); return(new BinaryReader(casc.OpenFile(encInfo.Key))); }
public void Clear() { CDNIndex.Clear(); CDNIndex = null; foreach (var stream in DataStreams) { stream.Value.Close(); } DataStreams.Clear(); EncodingHandler.Clear(); EncodingHandler = null; if (InstallHandler != null) { InstallHandler.Clear(); InstallHandler = null; } if (LocalIndex != null) { LocalIndex.Clear(); LocalIndex = null; } RootHandler.Clear(); RootHandler = null; if (DownloadHandler != null) { DownloadHandler.Clear(); DownloadHandler = null; } }
protected static BinaryReader OpenInstallFile(EncodingHandler enc, CASCHandlerBase casc) { var encInfo = enc.GetEntry(casc.Config.InstallMD5); if (encInfo == null) throw new FileNotFoundException("encoding info for install file missing!"); //ExtractFile(encInfo.Key, ".", "install"); return new BinaryReader(casc.OpenFile(encInfo.Key)); }
private CASCHandler(CASCConfig config, BackgroundWorkerEx worker) : base(config, worker) { Logger.WriteLine("CASCHandler: loading encoding data..."); using (var _ = new PerfCounter("new EncodingHandler()")) { using (var fs = OpenEncodingFile(this)) EncodingHandler = new EncodingHandler(fs, worker); } Logger.WriteLine("CASCHandler: loaded {0} encoding data", EncodingHandler.Count); if ((CASCConfig.LoadFlags & LoadFlags.Download) != 0) { Logger.WriteLine("CASCHandler: loading download data..."); using (var _ = new PerfCounter("new DownloadHandler()")) { using (var fs = OpenDownloadFile(EncodingHandler, this)) DownloadHandler = new DownloadHandler(fs, worker); } Logger.WriteLine("CASCHandler: loaded {0} download data", EncodingHandler.Count); } Logger.WriteLine("CASCHandler: loading root data..."); using (var _ = new PerfCounter("new RootHandler()")) { using (var fs = OpenRootFile(EncodingHandler, this)) { if (config.GameType == CASCGameType.S2 || config.GameType == CASCGameType.HotS) { RootHandler = new MNDXRootHandler(fs, worker); } else if (config.GameType == CASCGameType.D3) { RootHandler = new D3RootHandler(fs, worker, this); } else if (config.GameType == CASCGameType.WoW) { RootHandler = new WowRootHandler(fs, worker); } else if (config.GameType == CASCGameType.Agent || config.GameType == CASCGameType.Bna || config.GameType == CASCGameType.Client) { RootHandler = new AgentRootHandler(fs, worker); } else if (config.GameType == CASCGameType.Hearthstone) { RootHandler = new HSRootHandler(fs, worker); } else if (config.GameType == CASCGameType.Overwatch) { RootHandler = new OwRootHandler(fs, worker, this); } else { throw new Exception("Unsupported game " + config.BuildUID); } } } Logger.WriteLine("CASCHandler: loaded {0} root data", RootHandler.Count); if ((CASCConfig.LoadFlags & LoadFlags.Install) != 0) { Logger.WriteLine("CASCHandler: loading install data..."); using (var _ = new PerfCounter("new InstallHandler()")) { using (var fs = OpenInstallFile(EncodingHandler, this)) InstallHandler = new InstallHandler(fs, worker); InstallHandler.Print(); } Logger.WriteLine("CASCHandler: loaded {0} install data", InstallHandler.Count); } }
public void Clear() { CDNIndex?.Clear(); CDNIndex = null; foreach (var stream in DataStreams) stream.Value.Dispose(); DataStreams.Clear(); EncodingHandler?.Clear(); EncodingHandler = null; InstallHandler?.Clear(); InstallHandler = null; LocalIndex?.Clear(); LocalIndex = null; RootHandler?.Clear(); RootHandler = null; DownloadHandler?.Clear(); DownloadHandler = null; }
private CASCHandler(CASCConfig config, BackgroundWorkerEx worker) : base(config, worker) { Logger.WriteLine("CASCHandler: loading encoding data..."); using (var _ = new PerfCounter("new EncodingHandler()")) { using (var fs = OpenEncodingFile(this)) EncodingHandler = new EncodingHandler(fs, worker); } Logger.WriteLine("CASCHandler: loaded {0} encoding data", EncodingHandler.Count); if ((CASCConfig.LoadFlags & LoadFlags.Download) != 0) { Logger.WriteLine("CASCHandler: loading download data..."); using (var _ = new PerfCounter("new DownloadHandler()")) { using (var fs = OpenDownloadFile(EncodingHandler, this)) DownloadHandler = new DownloadHandler(fs, worker); } Logger.WriteLine("CASCHandler: loaded {0} download data", EncodingHandler.Count); } Logger.WriteLine("CASCHandler: loading root data..."); using (var _ = new PerfCounter("new RootHandler()")) { using (var fs = OpenRootFile(EncodingHandler, this)) { if (config.GameType == CASCGameType.S2 || config.GameType == CASCGameType.HotS) RootHandler = new MNDXRootHandler(fs, worker); else if (config.GameType == CASCGameType.D3) RootHandler = new D3RootHandler(fs, worker, this); else if (config.GameType == CASCGameType.WoW) RootHandler = new WowRootHandler(fs, worker); else if (config.GameType == CASCGameType.Agent || config.GameType == CASCGameType.Bna || config.GameType == CASCGameType.Client) RootHandler = new AgentRootHandler(fs, worker); else if (config.GameType == CASCGameType.Hearthstone) RootHandler = new HSRootHandler(fs, worker); else if (config.GameType == CASCGameType.Overwatch) RootHandler = new OwRootHandler(fs, worker, this); else throw new Exception("Unsupported game " + config.BuildUID); } } Logger.WriteLine("CASCHandler: loaded {0} root data", RootHandler.Count); if ((CASCConfig.LoadFlags & LoadFlags.Install) != 0) { Logger.WriteLine("CASCHandler: loading install data..."); using (var _ = new PerfCounter("new InstallHandler()")) { using (var fs = OpenInstallFile(EncodingHandler, this)) InstallHandler = new InstallHandler(fs, worker); InstallHandler.Print(); } Logger.WriteLine("CASCHandler: loaded {0} install data", InstallHandler.Count); } }
public void Clear() { CDNIndex.Clear(); CDNIndex = null; foreach (var stream in DataStreams) stream.Value.Close(); DataStreams.Clear(); EncodingHandler.Clear(); EncodingHandler = null; if (InstallHandler != null) { InstallHandler.Clear(); InstallHandler = null; } if (LocalIndex != null) { LocalIndex.Clear(); LocalIndex = null; } RootHandler.Clear(); RootHandler = null; if (DownloadHandler != null) { DownloadHandler.Clear(); DownloadHandler = null; } }
private CASCHandler(CASCConfig config, BackgroundWorkerEx worker) { Config = config; Logger.WriteLine("CASCHandler: loading CDN indices..."); using (var _ = new PerfCounter("CDNIndexHandler.Initialize()")) { CDNIndex = CDNIndexHandler.Initialize(config, worker); } Logger.WriteLine("CASCHandler: loaded {0} CDN indexes", CDNIndex.Count); if (!config.OnlineMode) { CDNIndexHandler.Cache.Enabled = false; Logger.WriteLine("CASCHandler: loading local indices..."); using (var _ = new PerfCounter("LocalIndexHandler.Initialize()")) { LocalIndex = LocalIndexHandler.Initialize(config, worker); } Logger.WriteLine("CASCHandler: loaded {0} local indexes", LocalIndex.Count); } Logger.WriteLine("CASCHandler: loading encoding data..."); using (var _ = new PerfCounter("new EncodingHandler()")) { using (var fs = OpenEncodingFile()) EncodingHandler = new EncodingHandler(fs, worker); } Logger.WriteLine("CASCHandler: loaded {0} encoding data", EncodingHandler.Count); if ((CASCConfig.LoadFlags & LoadFlags.Download) != 0) { Logger.WriteLine("CASCHandler: loading download data..."); using (var _ = new PerfCounter("new DownloadHandler()")) { using (var fs = OpenDownloadFile()) DownloadHandler = new DownloadHandler(fs, worker); } Logger.WriteLine("CASCHandler: loaded {0} download data", EncodingHandler.Count); } Logger.WriteLine("CASCHandler: loading root data..."); using (var _ = new PerfCounter("new RootHandler()")) { using (var fs = OpenRootFile()) { if (config.GameType == CASCGameType.S2 || config.GameType == CASCGameType.HotS) RootHandler = new MNDXRootHandler(fs, worker); else if (config.GameType == CASCGameType.D3) RootHandler = new D3RootHandler(fs, worker, this); else if (config.GameType == CASCGameType.WoW) RootHandler = new WowRootHandler(fs, worker); else if (config.GameType == CASCGameType.Agent) RootHandler = new AgentRootHandler(fs, worker); else if (config.GameType == CASCGameType.Hearthstone) RootHandler = new HSRootHandler(fs, worker); else if (config.GameType == CASCGameType.Overwatch) RootHandler = new OWRootHandler(fs, worker, this); else throw new Exception("Unsupported game " + config.BuildUID); } } Logger.WriteLine("CASCHandler: loaded {0} root data", RootHandler.Count); if ((CASCConfig.LoadFlags & LoadFlags.Install) != 0) { Logger.WriteLine("CASCHandler: loading install data..."); using (var _ = new PerfCounter("new InstallHandler()")) { using (var fs = OpenInstallFile()) InstallHandler = new InstallHandler(fs, worker); } Logger.WriteLine("CASCHandler: loaded {0} install data", InstallHandler.Count); } }
private CASCHandlerLite(CASCConfig config, LocaleFlags locale, BackgroundWorkerEx worker) : base(config, worker) { if (config.GameType != CASCGameType.WoW) { throw new Exception("Unsupported game " + config.BuildUID); } Logger.WriteLine("CASCHandlerLite: loading encoding data..."); EncodingHandler EncodingHandler; using (var _ = new PerfCounter("new EncodingHandler()")) { using (var fs = OpenEncodingFile(this)) EncodingHandler = new EncodingHandler(fs, worker); } Logger.WriteLine("CASCHandlerLite: loaded {0} encoding data", EncodingHandler.Count); Logger.WriteLine("CASCHandlerLite: loading root data..."); WowRootHandler RootHandler; using (var _ = new PerfCounter("new RootHandler()")) { using (var fs = OpenRootFile(EncodingHandler, this)) RootHandler = new WowRootHandler(fs, worker); } Logger.WriteLine("CASCHandlerLite: loaded {0} root data", RootHandler.Count); RootHandler.SetFlags(locale, ContentFlags.None, false); CDNIndexData = new Dictionary <MD5Hash, IndexEntry>(comparer); if (LocalIndex != null) { LocalIndexData = new Dictionary <MD5Hash, IndexEntry>(comparer); } RootEntry rootEntry; foreach (var entry in RootHandler.GetAllEntries()) { rootEntry = entry.Value; if ((rootEntry.LocaleFlags == locale || (rootEntry.LocaleFlags & locale) != LocaleFlags.None) && (rootEntry.ContentFlags & ContentFlags.LowViolence) == ContentFlags.None) { if (EncodingHandler.GetEntry(rootEntry.MD5, out EncodingEntry enc)) { if (!HashToKey.ContainsKey(entry.Key)) { HashToKey.Add(entry.Key, enc.Key); FileDataIdToHash.Add(RootHandler.GetFileDataIdByHash(entry.Key), entry.Key); if (LocalIndex != null) { IndexEntry iLocal = LocalIndex.GetIndexInfo(enc.Key); if (iLocal != null && !LocalIndexData.ContainsKey(enc.Key)) { LocalIndexData.Add(enc.Key, iLocal); } } IndexEntry iCDN = CDNIndex.GetIndexInfo(enc.Key); if (iCDN != null && !CDNIndexData.ContainsKey(enc.Key)) { CDNIndexData.Add(enc.Key, iCDN); } } } } } CDNIndex.Clear(); //CDNIndex = null; LocalIndex?.Clear(); LocalIndex = null; RootHandler.Clear(); RootHandler = null; EncodingHandler.Clear(); EncodingHandler = null; GC.Collect(); Logger.WriteLine("CASCHandlerLite: loaded {0} files", HashToKey.Count); }
protected BinaryReader OpenRootFile(EncodingHandler enc, CASCHandlerBase casc) { EncodingEntry encInfo; if (!enc.GetEntry(casc.Config.RootMD5, out encInfo)) throw new FileNotFoundException("encoding info for root file missing!"); //ExtractFile(encInfo.Key, ".", "root"); return new BinaryReader(casc.OpenFile(encInfo.Key)); }
protected BinaryReader OpenDownloadFile(EncodingHandler enc, CASCHandlerBase casc) { var encInfo = enc.GetEntry(casc.Config.DownloadMD5); if (encInfo == null) throw new FileNotFoundException("encoding info for download file missing!"); //ExtractFile(encInfo.Key, ".", "download"); return new BinaryReader(casc.OpenFile(encInfo.Key)); }
private CASCHandlerLite(CASCConfig config, LocaleFlags locale, BackgroundWorkerEx worker) : base(config, worker) { if (config.GameType != CASCGameType.WoW) { throw new Exception("Unsupported game " + config.BuildUID); } Logger.WriteLine("CASCHandlerLite: loading encoding data..."); EncodingHandler EncodingHandler; using (var _ = new PerfCounter("new EncodingHandler()")) { using (var fs = OpenEncodingFile(this)) EncodingHandler = new EncodingHandler(fs, worker); } Logger.WriteLine("CASCHandlerLite: loaded {0} encoding data", EncodingHandler.Count); Logger.WriteLine("CASCHandlerLite: loading root data..."); RootHandlerBase RootHandler; using (var _ = new PerfCounter("new RootHandler()")) { using (var fs = OpenRootFile(EncodingHandler, this)) RootHandler = new WowRootHandler(fs, worker); } Logger.WriteLine("CASCHandlerLite: loaded {0} root data", RootHandler.Count); RootHandler.SetFlags(locale, ContentFlags.None, false); RootEntry rootEntry; foreach (var entry in RootHandler.GetAllEntries()) { rootEntry = entry.Value; if ((rootEntry.Block.LocaleFlags == locale || (rootEntry.Block.LocaleFlags & locale) != LocaleFlags.None) && (rootEntry.Block.ContentFlags & ContentFlags.LowViolence) == ContentFlags.None) { var enc = EncodingHandler.GetEntry(rootEntry.MD5); if (enc != null) { if (!HashToKey.ContainsKey(entry.Key)) { HashToKey.Add(entry.Key, enc.Key); FileDataIdToHash.Add(rootEntry.FileDataId, entry.Key); } } } } RootHandler.Clear(); EncodingHandler.Clear(); RootHandler = null; EncodingHandler = null; GC.Collect(); Logger.WriteLine("CASCHandlerLite: loaded {0} files", HashToKey.Count); }
private CASCHandlerLite(CASCConfig config, LocaleFlags locale, BackgroundWorkerEx worker) : base(config, worker) { if (config.GameType != CASCGameType.WoW) throw new Exception("Unsupported game " + config.BuildUID); Logger.WriteLine("CASCHandlerLite: loading encoding data..."); EncodingHandler EncodingHandler; using (var _ = new PerfCounter("new EncodingHandler()")) { using (var fs = OpenEncodingFile(this)) EncodingHandler = new EncodingHandler(fs, worker); } Logger.WriteLine("CASCHandlerLite: loaded {0} encoding data", EncodingHandler.Count); Logger.WriteLine("CASCHandlerLite: loading root data..."); WowRootHandler RootHandler; using (var _ = new PerfCounter("new RootHandler()")) { using (var fs = OpenRootFile(EncodingHandler, this)) RootHandler = new WowRootHandler(fs, worker); } Logger.WriteLine("CASCHandlerLite: loaded {0} root data", RootHandler.Count); RootHandler.SetFlags(locale, ContentFlags.None, false); CDNIndexData = new Dictionary<MD5Hash, IndexEntry>(comparer); if (LocalIndex != null) LocalIndexData = new Dictionary<MD5Hash, IndexEntry>(comparer); RootEntry rootEntry; foreach (var entry in RootHandler.GetAllEntries()) { rootEntry = entry.Value; if ((rootEntry.LocaleFlags == locale || (rootEntry.LocaleFlags & locale) != LocaleFlags.None) && (rootEntry.ContentFlags & ContentFlags.LowViolence) == ContentFlags.None) { EncodingEntry enc; if (EncodingHandler.GetEntry(rootEntry.MD5, out enc)) { if (!HashToKey.ContainsKey(entry.Key)) { HashToKey.Add(entry.Key, enc.Key); FileDataIdToHash.Add(RootHandler.GetFileDataIdByHash(entry.Key), entry.Key); if (LocalIndex != null) { IndexEntry iLocal = LocalIndex.GetIndexInfo(enc.Key); if (iLocal != null && !LocalIndexData.ContainsKey(enc.Key)) LocalIndexData.Add(enc.Key, iLocal); } IndexEntry iCDN = CDNIndex.GetIndexInfo(enc.Key); if (iCDN != null && !CDNIndexData.ContainsKey(enc.Key)) CDNIndexData.Add(enc.Key, iCDN); } } } } CDNIndex.Clear(); //CDNIndex = null; LocalIndex?.Clear(); LocalIndex = null; RootHandler.Clear(); RootHandler = null; EncodingHandler.Clear(); EncodingHandler = null; GC.Collect(); Logger.WriteLine("CASCHandlerLite: loaded {0} files", HashToKey.Count); }