207 lines
7.4 KiB
C#
207 lines
7.4 KiB
C#
using System.Security;
|
||
using Thousandto.Update.Flow;
|
||
using Thousandto.Update.Log;
|
||
using AppPersistData = UnityEngine.Gonbest.MagicCube.AppPersistData;
|
||
using MonoXmlUtils = UnityEngine.Gonbest.MagicCube.MonoXmlUtils;
|
||
|
||
namespace Thousandto.Update.Xml
|
||
{
|
||
public partial class LocalVersionXml
|
||
{
|
||
string _TAG = "LocalVersion.cs ";
|
||
SecurityElement dom = null;
|
||
string _localVersionXml;
|
||
|
||
/// <summary>
|
||
/// 从xml内容解析
|
||
/// </summary>
|
||
/// <param name="xmlText"></param>
|
||
/// <returns></returns>
|
||
public int ParseFromText(string xmlText)
|
||
{
|
||
try
|
||
{
|
||
var rootNode = MonoXmlUtils.GetRootNodeFromString(xmlText);
|
||
parse(rootNode);
|
||
}
|
||
catch (System.Exception ex)
|
||
{
|
||
UpdateLog.ERROR_LOG(ex.Message + "\n" + ex.StackTrace);
|
||
UpdateLog.EXCEPTION_LOG(ex);
|
||
return CodeDefine.RET_FAIL;
|
||
}
|
||
|
||
return CodeDefine.RET_SUCCESS;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 从文件解析
|
||
/// </summary>
|
||
/// <param name="path"></param>
|
||
/// <returns></returns>
|
||
public int parseLocalVersionXml(string path)
|
||
{
|
||
UpdateLog.INFO_LOG(_TAG + "parseLocalVersionXml(string path): " + path);
|
||
|
||
int ret = CodeDefine.RET_SUCCESS;
|
||
try
|
||
{
|
||
var sp = MonoXmlUtils.LoadXmlEx(path);
|
||
if( sp == null || sp.ToXml() == null ) {
|
||
UpdateLog.ERROR_LOG(_TAG + "File not exist or invalid: " + path);
|
||
return CodeDefine.RET_FAIL_PARSE_LOCAL_XML_FILE;
|
||
}
|
||
|
||
dom = sp.ToXml();
|
||
_localVersionXml = path;
|
||
parse(dom);
|
||
}
|
||
catch (System.Exception ex)
|
||
{
|
||
ret = CodeDefine.RET_FAIL_PARSE_LOCAL_XML_FILE;
|
||
|
||
UpdateLog.ERROR_LOG(_TAG + ex.Message + "\n" + ex.StackTrace);
|
||
UpdateLog.EXCEPTION_LOG(ex);
|
||
}
|
||
|
||
return ret;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 解析过程
|
||
/// </summary>
|
||
/// <param name="dom"></param>
|
||
private void parse(SecurityElement dom)
|
||
{
|
||
UploadServerURL = parse(dom, "local_info/UploadServerURL");
|
||
ResourceVersionUrl = parse(dom, "local_info/VersionInfoURL");
|
||
BaseResVersion = parse(dom, "local_info/local_base_res_version");
|
||
PatchResVersion = parse(dom, "local_info/local_patch_res_version");
|
||
LocalAppVersion = parse(dom, "local_info/local_app_version");
|
||
Fid = parse(dom, "local_info/platform_fid");
|
||
Fgi = parse(dom, "local_info/fgi");
|
||
HasCopy = parse(dom, "local_info/hasCopy");
|
||
Developer = parse(dom, "local_info/developer");
|
||
EnableDownload = parse(dom, "local_info/enableDownload");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 保存文件
|
||
/// </summary>
|
||
/// <param name="baseVersion"></param>
|
||
/// <param name="patchVersion"></param>
|
||
/// <param name="hasCopy"></param>
|
||
/// <param name="appVersion"></param>
|
||
/// <returns></returns>
|
||
public int save(string baseVersion="", string patchVersion="", string hasCopy="", string appVersion="")
|
||
{
|
||
UpdateLog.INFO_LOG(_TAG + "save()");
|
||
int ret = CodeDefine.RET_SUCCESS;
|
||
bool hasChange = false;
|
||
try
|
||
{
|
||
if (!"".Equals(baseVersion) && baseVersion != _baseResVersion)
|
||
{
|
||
_baseResVersion = baseVersion;
|
||
set( dom, "local_info/local_base_res_version", baseVersion );
|
||
hasChange = true;
|
||
}
|
||
if (!"".Equals(patchVersion)&& patchVersion != _patchResVersion)
|
||
{
|
||
_patchResVersion = patchVersion;
|
||
hasChange = true;
|
||
set(dom, "local_info/local_patch_res_version", patchVersion);
|
||
AppPersistData.ResVersion = patchVersion;
|
||
}
|
||
if (!"".Equals(hasCopy) && hasCopy != _hasCopy)
|
||
{
|
||
_hasCopy = hasCopy;
|
||
hasChange = true;
|
||
set(dom, "local_info/hasCopy", hasCopy);
|
||
}
|
||
if (!"".Equals(appVersion) && appVersion != _localAppVersion)
|
||
{
|
||
_localAppVersion = appVersion;
|
||
hasChange = true;
|
||
set(dom, "local_info/local_app_version", appVersion);
|
||
AppPersistData.AppVersion = appVersion;
|
||
}
|
||
if (hasChange)
|
||
{
|
||
UnityEngine.Gonbest.MagicCube.MonoXmlUtils.SaveXml(_localVersionXml, dom);
|
||
}
|
||
else
|
||
{
|
||
UpdateLog.DEBUG_LOG("没有改动,不保存localversion.xml");
|
||
}
|
||
}
|
||
catch (System.Exception ex)
|
||
{
|
||
ret = CodeDefine.RET_FAIL_SAVE_LOCAL_XML_FILE;
|
||
UpdateLog.ERROR_LOG(_TAG + ex.Message + "\n" + ex.StackTrace);
|
||
UpdateLog.EXCEPTION_LOG(ex);
|
||
}
|
||
|
||
return ret;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 保存
|
||
/// </summary>
|
||
/// <param name="localVersion"></param>
|
||
/// <returns></returns>
|
||
public int save(LocalVersionXml localVersion)
|
||
{
|
||
UpdateLog.INFO_LOG(_TAG + "save()");
|
||
int ret = CodeDefine.RET_SUCCESS;
|
||
try
|
||
{
|
||
set( dom, "local_info/local_base_res_version", localVersion.BaseResVersion );
|
||
set( dom, "local_info/local_patch_res_version", localVersion.PatchResVersion );
|
||
set( dom, "local_info/hasCopy", localVersion.HasCopy );
|
||
set( dom, "local_info/local_app_version", localVersion.LocalAppVersion );
|
||
MonoXmlUtils.SaveXml(_localVersionXml, dom);
|
||
}
|
||
catch (System.Exception ex)
|
||
{
|
||
ret = CodeDefine.RET_FAIL_SAVE_LOCAL_XML_FILE;
|
||
UpdateLog.ERROR_LOG(_TAG + ex.Message + "\n" + ex.StackTrace);
|
||
UpdateLog.EXCEPTION_LOG(ex);
|
||
}
|
||
|
||
return ret;
|
||
}
|
||
|
||
private string parse(SecurityElement dom, string domPath)
|
||
{
|
||
if( dom == null || string.IsNullOrEmpty( domPath ) ) {
|
||
return string.Empty;
|
||
}
|
||
SecurityElement node = dom;
|
||
var subpaths = domPath.Split( '/' );
|
||
for( int i = 1; node != null && i < subpaths.Length; ++i ) {
|
||
var tag = subpaths[i];
|
||
node = node.SearchForChildByTag( tag );
|
||
}
|
||
return node != null ? node.Text : string.Empty;
|
||
}
|
||
|
||
private bool set(SecurityElement dom, string domPath, string value) {
|
||
if( dom == null || string.IsNullOrEmpty( domPath ) ) {
|
||
return false;
|
||
}
|
||
SecurityElement node = dom;
|
||
var subpaths = domPath.Split( '/' );
|
||
for( int i = 1; node != null && i < subpaths.Length; ++i ) {
|
||
var tag = subpaths[i];
|
||
node = node.SearchForChildByTag( tag );
|
||
}
|
||
if( node != null ) {
|
||
node.Text = value;
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
}
|
||
}
|