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("&", "&");
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("&", "&");
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("&", "&"); 因为&写入到xml文件中需要用&去替代&。
参考网址 格式化XML:输出有缩进效果的XML字符串
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。