예제 #1
0
    public static int LoadFromMemory(ref byte[] buffer, ref tagTResHeadAll head, ref int dataOffset)
    {
        if (buffer == null)
        {
            return(-3);
        }

        head       = new tagTResHeadAll();
        dataOffset = 0;

        int        buffLength = buffer.Length;
        ReadBuffer readbuf    = new ReadBuffer(ref buffer, buffLength);

        readbuf.ReadInt32(ref head.stResHead.iMagic);
        readbuf.ReadInt32(ref head.stResHead.iVersion);

        //check vision
        if (head.stResHead.iVersion != 7)
        {
            return(-4);
        }

        readbuf.ReadInt32(ref head.stResHead.iUnit);
        readbuf.ReadInt32(ref head.stResHead.iCount);
        readbuf.ReadByte(ref head.stResHead.szMetalibHash, tagTResHead.TRES_TRANSLATE_METALIB_HASH_LEN);
        readbuf.ReadInt32(ref head.stResHead.iResVersion);
        readbuf.ReadInt64(ref head.stResHead.tCreateTime);
        readbuf.ReadByte(ref head.stResHead.szResEncording, tagTResHead.TRES_ENCORDING_LEN);
        readbuf.ReadByte(ref head.stResHead.szContentHash, tagTResHead.TRES_TRANSLATE_METALIB_HASH_LEN);

        readbuf.ReadInt32(ref head.stResHeadExt.iDataOffset);
        readbuf.ReadInt32(ref head.stResHeadExt.iBuff);

        //check length
        int countLength = head.stResHeadExt.iDataOffset + head.stResHeadExt.iBuff +
                          head.stResHead.iUnit * head.stResHead.iCount;

        if (countLength != buffLength)
        {
            return(-5);
        }
        dataOffset = head.stResHeadExt.iDataOffset + head.stResHeadExt.iBuff;

        return(0);
    }
예제 #2
0
    public static int LoadFromFile(string file, ref tagTResHeadAll head, ref XmlDocument xmlDoc)
    {
        if (!File.Exists(file))
        {
            return(-1);
        }

        FileStream fs = new FileStream(file, FileMode.Open);

        if (fs.Length <= 0)
        {
            fs.Close();
            return(-2);
        }
        byte[] buffer = new byte[fs.Length];
        fs.Read(buffer, 0, (int)fs.Length);
        fs.Close();

        return(LoadFromMomory(ref buffer, ref head, ref xmlDoc));
    }
예제 #3
0
    public static int LoadFromFile(string file, ref tagTResHeadAll head, ref byte[] buffer, ref int dataOffset)
    {
        dataOffset = 0;

        if (!File.Exists(file))
        {
            return(-1);
        }

        FileStream fs = new FileStream(file, FileMode.Open);

        if (fs.Length <= 0)
        {
            fs.Close();
            return(-2);
        }
        buffer = new byte[fs.Length];
        fs.Read(buffer, 0, (int)fs.Length);
        fs.Close();

        return(LoadFromMemory(ref buffer, ref head, ref dataOffset));
    }
예제 #4
0
    public static int LoadFromMomory(ref byte[] buffer, ref tagTResHeadAll head, ref XmlDocument xmlDoc)
    {
        if (buffer == null)
        {
            return(-3);
        }
        head   = new tagTResHeadAll();
        xmlDoc = new XmlDocument();
        string xml = Encoding.UTF8.GetString(buffer);

        xmlDoc.LoadXml(xml);

        foreach (XmlNode node in xmlDoc.ChildNodes)
        {
            if (!node.HasChildNodes)
            {
                continue;
            }

            XmlNode resHeadAll = node.SelectSingleNode("TResHeadAll");
            if (resHeadAll == null)
            {
                continue;
            }

            XmlNode resHead = resHeadAll.SelectSingleNode("resHead");
            if (resHead == null)
            {
                continue;
            }

            foreach (XmlNode childNode in resHead.ChildNodes)
            {
                switch (childNode.Name)
                {
                case "Magic":
                    head.stResHead.iMagic = int.Parse(childNode.InnerText);
                    break;

                case "Version":
                    head.stResHead.iVersion = int.Parse(childNode.InnerText);

                    break;

                case "Unit":
                    head.stResHead.iUnit = int.Parse(childNode.InnerText);
                    break;

                case "Count":
                    head.stResHead.iCount = int.Parse(childNode.InnerText);
                    break;

                case "MetalibHash":
                {
                    byte[] temp = Encoding.Default.GetBytes(childNode.InnerText);
                    for (int i = 0; i < temp.Length; ++i)
                    {
                        head.stResHead.szMetalibHash[i] = temp[i];
                    }
                }
                break;

                case "ResVersion":
                    head.stResHead.iResVersion = int.Parse(childNode.InnerText);
                    break;

                case "CreateTime":
                    head.stResHead.tCreateTime = 0;        //int.Parse(childNode.InnerText);
                    break;

                case "ResEncording":
                {
                    byte[] temp = Encoding.Default.GetBytes(childNode.InnerText);
                    for (int i = 0; i < temp.Length; ++i)
                    {
                        head.stResHead.szResEncording[i] = temp[i];
                    }
                }
                break;

                case "ContentHash":
                {
                    byte[] temp = Encoding.Default.GetBytes(childNode.InnerText);
                    for (int i = 0; i < temp.Length; ++i)
                    {
                        head.stResHead.szContentHash[i] = temp[i];
                    }
                }
                break;
                }
            }

            //check vision
            if (head.stResHead.iVersion != 7)
            {
                return(-4);
            }

            XmlNode resHeadExt = resHeadAll.SelectSingleNode("resHeadExt");
            foreach (XmlNode childNode in resHeadExt.ChildNodes)
            {
                switch (childNode.Name)
                {
                case "DataOffset":
                    head.stResHeadExt.iDataOffset = int.Parse(childNode.InnerText);
                    break;

                case "Buff":
                    head.stResHeadExt.iBuff = int.Parse(childNode.InnerText);

                    break;
                }
            }

            break;      // just olny one
        }
        return(0);
    }