コード例 #1
0
        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));
        }
コード例 #2
0
        ///<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);
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        ///<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);
        }