private static async Task BuildSaveFileAsync(Stream inStream, Stream outStream, SaveFile.FileHeader header) { var saveHead = new SaveMgr.SaveHead(); saveHead.V = header.Version; saveHead.M = header.Mode; saveHead.Ms = header.Mods; saveHead.U = header.WriteTime; string head = Assets.USecurity.AES.Encrypt(JsonConvert.SerializeObject((object)saveHead), "bh89757"); await Task.Run(() => SevenZipHelper.Zip(inStream, outStream, head)); }
///<summary>Decodes a file using SevenZip </summary> private static async Task <SaveMgr.SaveHead> DecodeAsync(string OriPath, string destPath, int head = 2000) { int len = 0; SaveMgr.SaveHead fileHead = await Task.Run(() => GameUlt.GetFileHead(OriPath, out len)); head = len > head ? len : head; await Task.Run(() => SevenZipHelper.Unzip(OriPath, destPath, head)); return(fileHead); }
private static async Task BuildSaveFileAsync(Stream st, string path, SaveFile.FileHeader header) { SaveMgr.SaveHead saveHead = new SaveMgr.SaveHead(); saveHead.V = header.Version; saveHead.M = header.Mode; saveHead.Ms = header.Mods; saveHead.U = header.WriteTime; string head = Assets.USecurity.AES.Encrypt(JsonConvert.SerializeObject((object)saveHead), "bh89757"); if (IntPtr.Size == 4) { GC.Collect(); } await Task.Run(() => SevenZipHelper.Zip(st, path, head)); }
///<summary>Loads a xiaSaveFileLib.SaveFile object from the given path string. ///<para>head is the amount of bytes the Savehead object takes in the encoded file, should always be 2000 </para></summary> public static async Task <SaveFile> LoadSaveFileAsync(string path, int head = 2000) { string decodedPath = path.Replace(".save", ".osave"); SaveMgr.SaveHead saveHead = new SaveMgr.SaveHead(); try { saveHead = await DecodeAsync(path, decodedPath, head); } catch (Exception e) { File.Delete(decodedPath); throw new XiaException("Failed to decode File " + path, e); } SaveFile file = null; try { using (var reader = File.OpenText(decodedPath)) { var jsonString = await reader.ReadToEndAsync(); file = new SaveFile(); file.Header = new SaveFile.FileHeader() { Decompressed = saveHead.T, Mode = saveHead.M, Version = saveHead.V, WriteTime = saveHead.U, Mods = saveHead.Ms, FileName = Path.GetFileNameWithoutExtension(decodedPath) }; file.FileContent = jsonString; } } catch (Exception e) { throw new XiaException("Failed to parse file " + path, e); } finally { File.Delete(decodedPath); } return(file); }