示例#1
0
 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);
 }
示例#2
0
        //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);
        }