public async static Task ReadFileAsync(string path) { await Task.Run(async() => { if (System.IO.File.Exists(path)) { var reader = new MemoryReader((Memory <byte>) await System.IO.File.ReadAllBytesAsync(path)); var a7s = new A7S(ref reader); var data = await FileDBSerializer.ConvertAsync <DataBaseNode>(a7s.A7SData); var gameObjects = new AnnoGameObjects(data); ProgrammSettings.CurrentSavegame = new Savegame { FilePath = path, Data = data, GameObjects = gameObjects }; //var lookup = g.Items.ToLookup(i => i.Participant.GUID, new DescriptionComparer()); //var player = lookup.FirstOrDefault(i => i.Key.GUID == 41); //var z = TreeWorld.Create(player.Key, player); } }).ConfigureAwait(true); }
//public static void ReadBinaryNode(this ReadOnlyMemory<byte> memory, out TreeNode node) { // var Filereader = new SpanReader(memory, Endian.Little); // node = new TreeNode { Name = "BaseNode" }; // //Check Compression if (Filereader.ReadInt16() == -9608) { Filereader = new // SpanReader(memory.Span.ZlibDecompress(), Endian.Little); } // //Set Position from The Tags Section var TagsOff = Filereader.Position = Convert.ToInt32(MemoryMarshal.Read<UInt32>(Filereader.Span[^4..])); // //Read Tags var tags = FileDBSerializer.GetTagDictionary(ref Filereader); // //Array Elements tags.Add(1, "None"); tags.Add(32768, "None"); // //Get Nodes Section // var nodesReader = new SpanReader(Filereader.Memory[..TagsOff], Endian.Little); // ReadNodes(ref nodesReader, tags, node); //} #region Public Methods public static async Task <TreeNode> ReadBinaryNode(this ReadOnlyMemory <byte> memory, TreeNode treeNode = null) { var mainNode = treeNode ?? new TreeNode() { Name = "BaseNode" }; var currentNode = mainNode; await foreach (var item in FileDBSerializer.EnumerateTreeAsync(memory)) { switch (item.Item2 /*.serializingType*/) { case SerializingType.OpenNode: var newNode = new TreeNode() { Name = item.Item1 /*.Name*/, Parent = currentNode, NodeType = BinaryContentTypes.Node }; currentNode.Nodes.AddLast(newNode); currentNode = newNode; break; case SerializingType.CloseNode: currentNode = currentNode.Parent; break; case SerializingType.Content: var newAttribute = new TreeNode() { Name = item.Item1 /*.Name*/, Parent = currentNode, NodeType = BinaryContentTypes.Attribute, Content = item.Item3/*.Content*/ }; currentNode.Attributes.AddLast(newAttribute); break; } } return(mainNode); }