美文网首页
配置表解包(一)

配置表解包(一)

作者: 泱千澈 | 来源:发表于2020-03-16 00:03 被阅读0次
public static void UnBuild()
{
    byte[] bytes = Qingame.Utils.FileUtil.ReadAllBytes(PersistentAssetPath.ConfigZipFile);
    string url = HotVersionURL.GetServerVersionUrl();
    string versionXml = File.ReadAllText(StreamingAssetPath.VersionXmlFile);
    XmlReader xr = XmlUtil.CreateXmlReader(versionXml);
    xr.Read();
    string clientVersion = xr.GetAttribute("version");
    int[] clientVersionArray = StringExtend.ToIntArray(clientVersion, CharConstants.Dot);           
    int clientRepairVersion;
    int clientNoneRepairVersion;
    int.TryParse(xr.GetAttribute("rv"), out clientRepairVersion);
    int.TryParse(xr.GetAttribute("nrv"), out clientNoneRepairVersion);

    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
    request.Method = "GET";
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    using (Stream stream = response.GetResponseStream())
    {
        using (BinaryReader reader = new BinaryReader(stream, Encoding.UTF8))
        {
            byte[] text = reader.ReadBytes((int)response.ContentLength);
            string json = ZipUtil.UnGZipBytesToUTFString(text);
            Hashtable table = JsonUtil.jsonDecode(json) as Hashtable;
            Hashtable rootNode = table["root"] as Hashtable;
            string serverVersion = Convert.ToString(rootNode["version"]);
            int serverRepairVersion;
            int serverNoneRepairVersion;
            int.TryParse(Convert.ToString(rootNode["rv"]), out serverRepairVersion);
            int.TryParse(Convert.ToString(rootNode["nrv"]), out serverNoneRepairVersion);
            int[] serverVersionArray = StringExtend.ToIntArray(serverVersion, CharConstants.Dot);
            string configVersion = Convert.ToString(rootNode["cv"]);
            string configTestVersion = Convert.ToString(rootNode["ctv"]);
            string configNewVersion = Convert.ToString(rootNode["ctv_new"]);
            bool isNewClient = VersionUtil.CompareForce(clientVersionArray, serverVersionArray);
            if (isNewClient == false)
            {
                isNewClient = clientRepairVersion > serverRepairVersion;
                if (isNewClient == false)
                {
                    isNewClient = clientNoneRepairVersion > serverNoneRepairVersion;
                }
            }
            //是否是测试版
            bool isClientTest = StringExtend.ToBool(xr.GetAttribute("debug")) ? true : isNewClient;
            string version = isNewClient ? configNewVersion : (isClientTest ? configTestVersion : configVersion);
            bytes = EncryptUtil.Decrypt(bytes, version);
        }
    }

    Dictionary<string, byte[]> files = ZipUtil.UnZipBytesToFiles(bytes);
    XmlDocument xmlDoc = new XmlDocument();
    foreach (var pair in files)
    {
        if (pair.Key.EndsWith(AssetSuffixName.BS))
        {
            string file = GameAssetPath.Config + "/" + pair.Key.Replace(AssetSuffixName.BS, AssetSuffixName.XML);
            string content =  ConfigUtil.ByteStreamToXml(pair.Value, "bs", Path.GetFileNameWithoutExtension(pair.Key));
            content = content.Replace("&", "&amp;");
            StringReader Reader = new StringReader(content);
            xmlDoc.Load(Reader);
            xmlDoc.Save(file);
        }
        else if(pair.Key.EndsWith(AssetSuffixName.XML))
        {
            string file = GameAssetPath.Config + "/" + pair.Key;
            string content = Encoding.UTF8.GetString(pair.Value);
            content = content.Replace("&", "&amp;");
            StringReader Reader = new StringReader(content);
            xmlDoc.Load(Reader);
            xmlDoc.Save(file);
        }
        else
        {
            //c2s.txt, s2c.txt, *.*
            string file = GameAssetPath.Config + "/" + pair.Key;
            File.WriteAllBytes(file, pair.Value);
        }
    }

    AssetDatabase.SaveAssets();
    AssetDatabase.Refresh();
}

content = content.Replace("&", "&amp;"); 因为&写入到xml文件中需要用&amp;去替代&
参考网址 格式化XML:输出有缩进效果的XML字符串

相关文章

  • 配置表解包(一)

    content = content.Replace("&", "&"); 因为&写入到xml文件中需要用&...

  • 配置表解包(二)

    格式化XML文件,下面的例子可能不太恰当,但是能说明问题。sb能存储XML格式化之后的字符。 只是存储的话可以下面...

  • Arch/Manjaro安装deb安装包

    使用debtap工具进行解包 首先查看电脑上是否安装过 安装yay工具,记得配置arch 安装解包打包工具debt...

  • Centos MySQL二进制包安装并配置主从同步

    官网下载: 创建用户: 创建目录,并修改所属用户: 解包: 配置环境变量 检查 开始导入配置文件(以下配置文件可以...

  • day42 spring注解配置

    1.注解配置spring 导包4+2+spring-aop(注解包,新版需要导入) 1.为主配置文件引入新的命名空...

  • mybatis源码阅读笔记-卷四(注解)

    十.annotations注解包 Mybatis使用注解的方式可以减少使用xml配置sql,方便用断点的形式检测生...

  • RN通信机制

    模块配置表 oc生成一张模块配置表,包含所有模块和模块里的方法,暴露给JS。 模块配置表根据实现接口RCTBrid...

  • Jetbrains系列2019版windows破解

    Jetbrains系列2019版windows破解 下载破解包 修改配置首次打开可以采用免费试用30天,进入到工具...

  • Kettle案例四:表输入和表输出

    流程图 表输入配置image.png 表输出配置image.png

  • 配置表

    类似BAPI将数据直接导入数据表 (1)创建数据表:SE11 把字段维护好之后——>技术设置——>实用程序——>表...

网友评论

      本文标题:配置表解包(一)

      本文链接:https://www.haomeiwen.com/subject/bmgiehtx.html