Exemple #1
0
        private void GraphInit()
        {
            ErrorCode  err;
            XmlElement graph = myIohandler.ReadFile(out err);

            if (err != ErrorCode.NoError)
            {
                throw new Exception($"Error found during read DB file. Error Code:{err}");
            }
            var nodes = graph.GetNode(XmlNames.Nodes);
            var edges = graph.GetNode(XmlNames.Edges);

            //Nodes
            foreach (XmlElement curItem in nodes)
            {
                INode newNode = (INode)SerializableHelper.Deserialize(curItem);
                if (newNode == null)
                {
                    throw new Exception($"Error found during Deserialize. XML:{curItem}");
                }
                myNodeList.Add(newNode.Guid, newNode);
            }
            //Edges
            foreach (XmlElement curItem in edges)
            {
                IEdge newEdge = (IEdge)SerializableHelper.Deserialize(curItem);
                if (newEdge == null)
                {
                    throw new Exception($"Error found during Deserialize. XML:{curItem}");
                }
                //Add Link
                AddEdge(newEdge.FromGuid, newEdge.ToGuid, newEdge);
            }
        }
Exemple #2
0
        private void GraphInit()
        {
            XmlElement graph = myIohandler.ReadFile();
            var        nodes = graph.GetNode(XmlNames.Nodes);
            var        edges = graph.GetNode(XmlNames.Edges);

            //Nodes
            foreach (XmlElement curItem in nodes)
            {
                Node newNode = (Node)SerializableHelper.Deserialize(curItem, myConfiguration);
                if (newNode == null)
                {
                    throw new SerializationException($"Error found during Deserialize. XML:{curItem}");
                }
                myNodeList.Add(newNode.Guid, newNode);
            }
            //Edges
            foreach (XmlElement curItem in edges)
            {
                Edge newEdge = (Edge)SerializableHelper.Deserialize(curItem, myConfiguration);
                if (newEdge == null)
                {
                    throw new SerializationException($"Error found during Deserialize. XML:{curItem}");
                }
                //Add Link
                AddEdgeByGuid(newEdge.FromGuid, newEdge.ToGuid, newEdge);
            }
        }
Exemple #3
0
        /// <summary>Read a "Version2" STU asset</summary>
        private void DeserializeV2(BinaryReader reader)
        {
            reader.BaseStream.Position = StartPos;
            HeaderChecksum             = CRC.CRC64(reader.ReadBytes(36), 36, 0xFFFFFFFFFFFFFFFF);
            reader.BaseStream.Position = StartPos;
            SerializableHelper.Deserialize(reader, out InstanceInfo);
            SerializableHelper.Deserialize(reader, out InlinedTypesInfo);
            SerializableHelper.Deserialize(reader, out FieldInfoBags);

            int dynDataSize      = reader.ReadInt32();
            int dynDataOff       = reader.ReadInt32();
            int dataBufferOffset = reader.ReadInt32();

            if (dynDataSize > 0)
            {
                reader.BaseStream.Position = dynDataOff + StartPos;
                DynData = new BinaryReader(new MemoryStream(reader.ReadBytes(dynDataSize)));
            }
            if (dataBufferOffset < reader.BaseStream.Length)
            {
                long dataSize = reader.BaseStream.Length - dataBufferOffset;
                if (dataSize > int.MaxValue)
                {
                    throw new Exception("oops");
                }

                reader.BaseStream.Position = dataBufferOffset + StartPos;
                Data = new BinaryReader(new MemoryStream(reader.ReadBytes((int)dataSize)));
            }

            if (InstanceInfo.Count > 0)
            {
                Instances = new STUInstance[InstanceInfo.Count];
                for (int i = 0; i < InstanceInfo.Count; i++)
                {
                    Instances[i] = Manager.CreateInstance(InstanceInfo[i].Hash);
                }
            }

            for (int i = 0; i != InstanceInfo.Count; ++i)
            {
                STUInstance_Info info     = InstanceInfo[i];
                STUInstance      instance = Instances[i];

                long startPosition = Data.Position();

                if (instance != null)
                {
                    instance.Deserialize(this);
                    long endPosition = Data.Position();
                }

                Data.BaseStream.Position = startPosition + info.Size;
                //if (endPosition - startPosition != info.Size)
                //    throw new Exceptions.InvalidTypeSize($"read len != type size. Type: '{instance.GetName()}', Data offset: {startPosition}");
            }
        }
        public void Deserialize(BinaryReader reader)
        {
            int  size        = reader.ReadInt32();
            int  offset      = reader.ReadInt32();
            long oldPosition = reader.BaseStream.Position;

            reader.BaseStream.Position = offset;
            Capacity = size;

            for (int i = 0; i != size; ++i)
            {
                SerializableHelper.Deserialize(reader, out T val);
                Add(val);
            }
            reader.BaseStream.Position = oldPosition;
        }