diff options
| author | chai <chaifix@163.com> | 2021-01-25 14:28:30 +0800 | 
|---|---|---|
| committer | chai <chaifix@163.com> | 2021-01-25 14:28:30 +0800 | 
| commit | 6eb915c129fc90c6f4c82ae097dd6ffad5239efc (patch) | |
| tree | 7dd2be50edf41f36b60fac84696e731c13afe617 /Client/Assets/Scripts/XUtliPoolLib/XUpdater | |
+scripts
Diffstat (limited to 'Client/Assets/Scripts/XUtliPoolLib/XUpdater')
64 files changed, 3837 insertions, 0 deletions
diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AssetLevel.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AssetLevel.cs new file mode 100644 index 00000000..8d4ac78b --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AssetLevel.cs @@ -0,0 +1,11 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	public enum AssetLevel
 +	{
 +		Memory,
 +		Image,
 +		Disk
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AssetLevel.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AssetLevel.cs.meta new file mode 100644 index 00000000..bebf8f33 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AssetLevel.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 11511373ad6c83c4ebf7b1a96b877ae9 +timeCreated: 1611465291 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncAssemblyRequest.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncAssemblyRequest.cs new file mode 100644 index 00000000..8ce94783 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncAssemblyRequest.cs @@ -0,0 +1,12 @@ +using System;
 +using System.Reflection;
 +
 +namespace XUpdater
 +{
 +	public sealed class AsyncAssemblyRequest
 +	{
 +		public Assembly Main = null;
 +
 +		public bool IsDone = false;
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncAssemblyRequest.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncAssemblyRequest.cs.meta new file mode 100644 index 00000000..96a8513d --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncAssemblyRequest.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ab80306a5baed0b438a50ef96d8ed683 +timeCreated: 1611465741 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncCachedRequest.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncCachedRequest.cs new file mode 100644 index 00000000..a3809d6d --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncCachedRequest.cs @@ -0,0 +1,13 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	internal sealed class AsyncCachedRequest
 +	{
 +		public bool Cached = false;
 +
 +		public bool MaybeCached = false;
 +
 +		public bool IsDone = false;
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncCachedRequest.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncCachedRequest.cs.meta new file mode 100644 index 00000000..ab02c220 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncCachedRequest.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fefa949f138c8da418ebb1ac4c88d742 +timeCreated: 1611465813 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncDecompressRequest.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncDecompressRequest.cs new file mode 100644 index 00000000..44410f71 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncDecompressRequest.cs @@ -0,0 +1,13 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	public sealed class AsyncDecompressRequest
 +	{
 +		public bool IsDone = false;
 +
 +		public bool HasError = false;
 +
 +		public float Ratio = 0f;
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncDecompressRequest.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncDecompressRequest.cs.meta new file mode 100644 index 00000000..80baef0a --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncDecompressRequest.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c1b139bb74e9c65488af36d532dbe8ec +timeCreated: 1611465753 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncExtractRequest.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncExtractRequest.cs new file mode 100644 index 00000000..697345a0 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncExtractRequest.cs @@ -0,0 +1,11 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	internal sealed class AsyncExtractRequest
 +	{
 +		public bool IsDone = false;
 +
 +		public byte[] Data = null;
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncExtractRequest.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncExtractRequest.cs.meta new file mode 100644 index 00000000..876e2aad --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncExtractRequest.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5011231640afbcc4c8ac6dc741d6862f +timeCreated: 1611465643 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncLogRequest.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncLogRequest.cs new file mode 100644 index 00000000..138ca5f3 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncLogRequest.cs @@ -0,0 +1,9 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	internal sealed class AsyncLogRequest
 +	{
 +		public bool IsDone = false;
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncLogRequest.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncLogRequest.cs.meta new file mode 100644 index 00000000..2292840b --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncLogRequest.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 266c9c0b4ff1d5f44b4dc47febd01fa8 +timeCreated: 1611465301 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncReadRequest.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncReadRequest.cs new file mode 100644 index 00000000..6cddb9e3 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncReadRequest.cs @@ -0,0 +1,11 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	internal sealed class AsyncReadRequest
 +	{
 +		public bool IsDone = false;
 +
 +		public byte[] bytes = null;
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncReadRequest.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncReadRequest.cs.meta new file mode 100644 index 00000000..63a452d2 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncReadRequest.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c49dde5a2c4330d43a70cb229f191ee3 +timeCreated: 1611465755 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncVersionProcessRequest.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncVersionProcessRequest.cs new file mode 100644 index 00000000..35d4bf1d --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncVersionProcessRequest.cs @@ -0,0 +1,11 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	internal sealed class AsyncVersionProcessRequest
 +	{
 +		public bool IsDone = false;
 +
 +		public bool IsCorrect = false;
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncVersionProcessRequest.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncVersionProcessRequest.cs.meta new file mode 100644 index 00000000..e563b514 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncVersionProcessRequest.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a9c0ae94ae541204d9b38b7b61fcaa13 +timeCreated: 1611465739 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncWriteRequest.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncWriteRequest.cs new file mode 100644 index 00000000..53577bdd --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncWriteRequest.cs @@ -0,0 +1,17 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	internal sealed class AsyncWriteRequest
 +	{
 +		public bool IsDone = false;
 +
 +		public bool HasError = false;
 +
 +		public string Location = null;
 +
 +		public string Name = null;
 +
 +		public uint Size = 0u;
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncWriteRequest.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncWriteRequest.cs.meta new file mode 100644 index 00000000..37f0f188 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/AsyncWriteRequest.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e366103fe3b18ee4d95e430c195d3e06 +timeCreated: 1611465801 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/BuildTarget.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/BuildTarget.cs new file mode 100644 index 00000000..4b58adae --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/BuildTarget.cs @@ -0,0 +1,12 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	public enum BuildTarget
 +	{
 +		Unknown,
 +		IOS,
 +		Android,
 +		Standalone
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/BuildTarget.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/BuildTarget.cs.meta new file mode 100644 index 00000000..544f6004 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/BuildTarget.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 29d77a42d1136f0429c70b41706ba425 +timeCreated: 1611465303 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/BundleMetaRes.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/BundleMetaRes.cs new file mode 100644 index 00000000..37e47794 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/BundleMetaRes.cs @@ -0,0 +1,7 @@ +using System;
 +using System.Collections.Generic;
 +
 +namespace XUpdater
 +{
 +	public delegate List<XMetaResPackage> BundleMetaRes(List<string> rawList, string destFoler);
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/BundleMetaRes.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/BundleMetaRes.cs.meta new file mode 100644 index 00000000..96b725a2 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/BundleMetaRes.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2f6317ec5b64c3c4a9291fdbeafb266e +timeCreated: 1611465307 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleBundleDownload.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleBundleDownload.cs new file mode 100644 index 00000000..08e62a97 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleBundleDownload.cs @@ -0,0 +1,7 @@ +using System;
 +using UnityEngine;
 +
 +namespace XUpdater
 +{
 +	internal delegate AsyncWriteRequest HandleBundleDownload(WWW www, XBundleData bundle, string error);
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleBundleDownload.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleBundleDownload.cs.meta new file mode 100644 index 00000000..776a5042 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleBundleDownload.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4e48883f185e30c498dbd279d7ceddf7 +timeCreated: 1611465642 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleFetchBundle.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleFetchBundle.cs new file mode 100644 index 00000000..9270b174 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleFetchBundle.cs @@ -0,0 +1,7 @@ +using System;
 +using UnityEngine;
 +
 +namespace XUpdater
 +{
 +	internal delegate void HandleFetchBundle(WWW bundle, byte[] bytes, XBundleData data, bool newdownload);
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleFetchBundle.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleFetchBundle.cs.meta new file mode 100644 index 00000000..0ee08764 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleFetchBundle.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 54c07dfa9833fa14abfce085cbf6dc3e +timeCreated: 1611465645 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleLoadAsset.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleLoadAsset.cs new file mode 100644 index 00000000..eacf231b --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleLoadAsset.cs @@ -0,0 +1,7 @@ +using System;
 +using UnityEngine;
 +
 +namespace XUpdater
 +{
 +	internal delegate void HandleLoadAsset(XResPackage package, UnityEngine.Object asset);
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleLoadAsset.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleLoadAsset.cs.meta new file mode 100644 index 00000000..ef4377e4 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleLoadAsset.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6d4aa5d1cc5ccba43a34283eb79b80d8 +timeCreated: 1611465685 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleLoadBundle.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleLoadBundle.cs new file mode 100644 index 00000000..55482def --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleLoadBundle.cs @@ -0,0 +1,7 @@ +using System;
 +using UnityEngine;
 +
 +namespace XUpdater
 +{
 +	internal delegate void HandleLoadBundle(AssetBundle bundle);
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleLoadBundle.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleLoadBundle.cs.meta new file mode 100644 index 00000000..ae3b1392 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleLoadBundle.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 93f6995e1f9a4de44a45bbd084448aed +timeCreated: 1611465707 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandlePreDecompressing.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandlePreDecompressing.cs new file mode 100644 index 00000000..b4436ea3 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandlePreDecompressing.cs @@ -0,0 +1,6 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	public delegate void HandlePreDecompressing(string error);
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandlePreDecompressing.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandlePreDecompressing.cs.meta new file mode 100644 index 00000000..345a87bb --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandlePreDecompressing.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9c4e5dd84410a0e40a0423a53f181555 +timeCreated: 1611465711 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleVersionDownload.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleVersionDownload.cs new file mode 100644 index 00000000..77435200 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleVersionDownload.cs @@ -0,0 +1,7 @@ +using System;
 +using UnityEngine;
 +
 +namespace XUpdater
 +{
 +	internal delegate AsyncVersionProcessRequest HandleVersionDownload(TextAsset text);
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleVersionDownload.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleVersionDownload.cs.meta new file mode 100644 index 00000000..48c83647 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleVersionDownload.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 15065b61bf5ac3d478f327cb5ae7a10b +timeCreated: 1611465294 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleVersionLoaded.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleVersionLoaded.cs new file mode 100644 index 00000000..efc66aa0 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleVersionLoaded.cs @@ -0,0 +1,6 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	internal delegate void HandleVersionLoaded(bool correct);
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleVersionLoaded.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleVersionLoaded.cs.meta new file mode 100644 index 00000000..de47e11e --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/HandleVersionLoaded.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cffebd77213e132488f925c85afdb585 +timeCreated: 1611465760 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/ResourceType.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/ResourceType.cs new file mode 100644 index 00000000..a4e52b27 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/ResourceType.cs @@ -0,0 +1,11 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	public enum ResourceType
 +	{
 +		Assets,
 +		Scene,
 +		Script
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/ResourceType.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/ResourceType.cs.meta new file mode 100644 index 00000000..19ade6ce --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/ResourceType.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4bed5f3fc6adece4f9497c3d92c4fa51 +timeCreated: 1611465641 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XBundle.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XBundle.cs new file mode 100644 index 00000000..acb8fa42 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XBundle.cs @@ -0,0 +1,64 @@ +using System;
 +using System.Collections;
 +using UnityEngine;
 +
 +namespace XUpdater
 +{
 +	internal sealed class XBundle : MonoBehaviour
 +	{
 +		private AssetBundleRequest _assetloader = null;
 +
 +		public void GetBundle(WWW www, byte[] data, HandleLoadBundle callback, bool load)
 +		{
 +			base.StartCoroutine(this.LoadBundle(www, data, callback, load));
 +		}
 +
 +		public void GetAsset(AssetBundle bundle, XResPackage package, HandleLoadAsset callback)
 +		{
 +			base.StartCoroutine(this.LoadAsset(bundle, package, callback));
 +		}
 +
 +		private IEnumerator LoadBundle(WWW www, byte[] data, HandleLoadBundle callback, bool load)
 +		{
 +			AssetBundle bundle = null;
 +			if (load)
 +			{
 +				bool flag = www != null;
 +				if (flag)
 +				{
 +					bundle = www.assetBundle;
 +				}
 +				else
 +				{
 +					bundle = AssetBundle.LoadFromMemory(data);
 +				}
 +				yield return null;
 +			}
 +			bool flag2 = callback != null;
 +			if (flag2)
 +			{
 +				callback(bundle);
 +			}
 +			bool flag3 = www != null;
 +			if (flag3)
 +			{
 +				www.Dispose();
 +			}
 +			www = null;
 +			yield break;
 +		}
 +
 +		private IEnumerator LoadAsset(AssetBundle bundle, XResPackage package, HandleLoadAsset callback)
 +		{
 +			this._assetloader = bundle.LoadAssetAsync(base.name, XUpdater.Ass.GetType(package.type));
 +			yield return this._assetloader;
 +			bool flag = callback != null;
 +			if (flag)
 +			{
 +				callback(package, this._assetloader.asset);
 +			}
 +			this._assetloader = null;
 +			yield break;
 +		}
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XBundle.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XBundle.cs.meta new file mode 100644 index 00000000..4c9a9bdb --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XBundle.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d74b1473d4088034d828831e70be9ad7 +timeCreated: 1611465764 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XBundleData.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XBundleData.cs new file mode 100644 index 00000000..e42cb345 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XBundleData.cs @@ -0,0 +1,16 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	[Serializable]
 +	public class XBundleData
 +	{
 +		public string Name;
 +
 +		public string MD5;
 +
 +		public uint Size;
 +
 +		public AssetLevel Level = AssetLevel.Memory;
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XBundleData.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XBundleData.cs.meta new file mode 100644 index 00000000..2fa3cc7b --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XBundleData.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 77c36f6c000743e479e8dce789a1d43e +timeCreated: 1611465691 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XCaching.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XCaching.cs new file mode 100644 index 00000000..a4780a7a --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XCaching.cs @@ -0,0 +1,404 @@ +using System;
 +using System.IO;
 +using System.Security.Cryptography;
 +using System.Text;
 +using System.Threading;
 +using UnityEngine;
 +using XUtliPoolLib;
 +
 +namespace XUpdater
 +{
 +	public sealed class XCaching : XSingleton<XCaching>
 +	{
 +		public string VersionServer
 +		{
 +			get
 +			{
 +				return this._version_server;
 +			}
 +		}
 +
 +		public string HostUrl
 +		{
 +			get
 +			{
 +				return this._host_url;
 +			}
 +		}
 +
 +		public string UpdatePath
 +		{
 +			get
 +			{
 +				return this._update_path;
 +			}
 +		}
 +
 +		public XDownloader Downloader
 +		{
 +			get
 +			{
 +				return this._down_loader;
 +			}
 +		}
 +
 +		private string _version_server = null;
 +
 +		private string _host_url = null;
 +
 +		internal static readonly string UPDATE_DIRECTORY = "/update/";
 +
 +		private string _update_path = null;
 +
 +		private StringBuilder _log = new StringBuilder();
 +
 +		private XDownloader _down_loader = null;
 +
 +		private MD5CryptoServiceProvider _md5Generator = null;
 +
 +		private AsyncExtractRequest _aer = null;
 +
 +		private AsyncWriteRequest _meta_awr = null;
 +
 +		internal string GetLocalPath(XBundleData data)
 +		{
 +			return string.Format("{0}{1}.assetbundle", this._update_path, data.Name);
 +		}
 +
 +		internal string GetLocalUrl(XBundleData data)
 +		{
 +			bool flag = XSingleton<XUpdater>.singleton.RunTimePlatform == BuildTarget.Standalone;
 +			string arg;
 +			if (flag)
 +			{
 +				arg = "file:///";
 +			}
 +			else
 +			{
 +				arg = "file://";
 +			}
 +			string text = string.Format("{0}{1}{2}.assetbundle", arg, this._update_path, data.Name);
 +			XSingleton<XDebug>.singleton.AddLog("LocalURL: ", text, null, null, null, null, XDebugColor.XDebug_None);
 +			return text;
 +		}
 +
 +		public string GetLoginServerAddress(string loginType)
 +		{
 +			IPlatform xplatform = XSingleton<XUpdater>.singleton.XPlatform;
 +			return xplatform.GetHostWithHttpDns(xplatform.GetLoginServer(loginType));
 +		}
 +
 +		internal string GetDownloadUrl(XBundleData data)
 +		{
 +			return this.MakeToken(string.Format("{0}{1}/{2}.assetbundle", this.HostUrl, XSingleton<XUpdater>.singleton.Platform, data.Name));
 +		}
 +
 +		internal string MakeToken(string url)
 +		{
 +			return string.Format("{0}?token={1}", url, DateTime.Now.Ticks);
 +		}
 +
 +		public override bool Init()
 +		{
 +			IPlatform xplatform = XSingleton<XUpdater>.singleton.XPlatform;
 +			this._version_server = xplatform.GetHostWithHttpDns(xplatform.GetVersionServer());
 +			this._host_url = xplatform.GetHostUrl();
 +			this._md5Generator = new MD5CryptoServiceProvider();
 +			this._down_loader = XUpdater.XGameRoot.AddComponent<XDownloader>();
 +			this._update_path = Application.persistentDataPath + XCaching.UPDATE_DIRECTORY;
 +			return true;
 +		}
 +
 +		internal bool EnableCache()
 +		{
 +			bool flag = !Directory.Exists(this._update_path);
 +			if (flag)
 +			{
 +				XSingleton<XDebug>.singleton.AddLog("Create new path " + this._update_path, null, null, null, null, null, XDebugColor.XDebug_None);
 +				try
 +				{
 +					Directory.CreateDirectory(this._update_path);
 +					return Directory.Exists(this._update_path);
 +				}
 +				catch (Exception ex)
 +				{
 +					XSingleton<XDebug>.singleton.AddErrorLog(string.Format("Error ", ex.Message), null, null, null, null, null);
 +					return false;
 +				}
 +			}
 +			XSingleton<XDebug>.singleton.AddLog(string.Format("Path {0} exists.", this._update_path), null, null, null, null, null, XDebugColor.XDebug_None);
 +			return true;
 +		}
 +
 +		internal AsyncCachedRequest IsBundleCached(XBundleData bundle, uint size)
 +		{
 +			string fullpath = this.GetLocalPath(bundle);
 +			AsyncCachedRequest req = new AsyncCachedRequest();
 +			bool flag = bundle.Size < size;
 +			if (flag)
 +			{
 +				new Thread((ThreadStart) delegate
 +				{
 +					bool flag2 = File.Exists(fullpath);
 +					if (flag2)
 +					{
 +						byte[] bundle2 = this.LoadFile(fullpath);
 +						string a = this.CalculateMD5(bundle2);
 +						req.Cached = (a == bundle.MD5);
 +						req.MaybeCached = true;
 +					}
 +					req.IsDone = true;
 +				}).Start();
 +			}
 +			else
 +			{
 +				req.MaybeCached = File.Exists(fullpath);
 +				req.IsDone = true;
 +			}
 +			return req;
 +		}
 +
 +		internal bool CleanCache()
 +		{
 +			string path = ((int)Application.platform == 8) ? ("/private" + this._update_path) : this._update_path;
 +			bool result;
 +			try
 +			{
 +				bool flag = Directory.Exists(path);
 +				if (flag)
 +				{
 +					DirectoryInfo directoryInfo = new DirectoryInfo(path);
 +					directoryInfo.Delete(true);
 +					bool flag2 = !Directory.Exists(path);
 +					bool flag3 = flag2;
 +					if (flag3)
 +					{
 +						result = this.EnableCache();
 +					}
 +					else
 +					{
 +						result = false;
 +					}
 +				}
 +				else
 +				{
 +					result = true;
 +				}
 +			}
 +			catch (Exception ex)
 +			{
 +				XSingleton<XDebug>.singleton.AddErrorLog("CleanCache error: ", ex.Message, null, null, null, null);
 +				result = false;
 +			}
 +			return result;
 +		}
 +
 +		internal byte[] LoadFile(string fullpath)
 +		{
 +			return File.ReadAllBytes(fullpath);
 +		}
 +
 +		private AsyncReadRequest LoadFileAsync(string fullpath)
 +		{
 +			AsyncReadRequest arr = new AsyncReadRequest();
 +			new Thread((ThreadStart) delegate
 +			{
 +				arr.bytes = File.ReadAllBytes(fullpath);
 +				arr.IsDone = true;
 +			}).Start();
 +			return arr;
 +		}
 +
 +		internal void Download(XBundleData bundle, HandleFetchBundle callback, float percent)
 +		{
 +			this._down_loader.GetBundle(bundle, this.GetDownloadUrl(bundle), new HandleBundleDownload(this.OnBundleDownload), callback, percent);
 +		}
 +
 +		internal AsyncWriteRequest Download(string meta, uint size, float percent)
 +		{
 +			this._meta_awr = new AsyncWriteRequest();
 +			this._meta_awr.Size = size;
 +			this._meta_awr.Location = meta;
 +			this._meta_awr.Name = meta.Substring(meta.LastIndexOf('/') + 1);
 +			this._meta_awr.HasError = false;
 +			string name = meta.Substring(meta.LastIndexOf("/") + 1);
 +			meta = this.MakeToken(this.HostUrl + XSingleton<XUpdater>.singleton.Platform + meta);
 +			this._down_loader.GetMeta(meta, name, new XDownloader.HandleBytesDownload(this.OnMetaDownload), percent);
 +			return this._meta_awr;
 +		}
 +
 +		internal bool Extract(XBundleData bundle, HandleFetchBundle callback, float percent)
 +		{
 +			bool flag =(int) Application.platform == 8;
 +			bool result;
 +			if (flag)
 +			{
 +				bool flag2 = this._aer == null;
 +				if (flag2)
 +				{
 +					this._aer = new AsyncExtractRequest();
 +					new Thread((ThreadStart)delegate
 +					{
 +						string localPath = this.GetLocalPath(bundle);
 +						this._aer.Data = File.ReadAllBytes(localPath);
 +						this._aer.IsDone = true;
 +					}).Start();
 +				}
 +				bool isDone = this._aer.IsDone;
 +				if (isDone)
 +				{
 +					callback(null, this._aer.Data, bundle, false);
 +					this._aer.Data = null;
 +					this._aer = null;
 +					result = true;
 +				}
 +				else
 +				{
 +					result = false;
 +				}
 +			}
 +			else
 +			{
 +				this._down_loader.GetBundle(bundle, this.GetLocalUrl(bundle), null, callback, percent);
 +				result = true;
 +			}
 +			return result;
 +		}
 +
 +		private void OnMetaDownload(WWW www, string error)
 +		{
 +			bool flag = string.IsNullOrEmpty(error);
 +			if (flag)
 +			{
 +				byte[] bs = www.bytes;
 +				new Thread((ThreadStart)delegate
 +				{
 +					try
 +					{
 +						bool needCheckFile = XSingleton<XUpdater>.singleton.NeedCheckFile;
 +						if (needCheckFile)
 +						{
 +							bool flag2 = Path.GetExtension(this._meta_awr.Location).Contains("ab");
 +							if (flag2)
 +							{
 +								bool flag3 = bs[0] != 85 || bs[1] != 110 || bs[2] != 105 || bs[3] != 116 || bs[4] != 121 || bs[5] != 70 || bs[6] != 83;
 +								if (flag3)
 +								{
 +									throw new Exception("Meta head check failed.");
 +								}
 +							}
 +						}
 +						string text = Path.Combine(this._update_path, "AssetBundles");
 +						string fileName = Path.GetFileName(this._meta_awr.Location);
 +						bool flag4 = !Directory.Exists(text);
 +						if (flag4)
 +						{
 +							Directory.CreateDirectory(text);
 +						}
 +						string text2 = Path.Combine(text, fileName);
 +						File.WriteAllBytes(text2, bs);
 +						bool needCheckFile2 = XSingleton<XUpdater>.singleton.NeedCheckFile;
 +						if (needCheckFile2)
 +						{
 +							Thread.Sleep(1);
 +							bool flag5 = this.CheckFileSize(text2, (long)((ulong)this._meta_awr.Size));
 +							if (!flag5)
 +							{
 +								throw new Exception("Meta File size " + this._meta_awr.Size + " not match.");
 +							}
 +							XSingleton<XUpdater>.singleton.XPlatform.SetNoBackupFlag(text2);
 +							this._meta_awr.IsDone = true;
 +						}
 +						else
 +						{
 +							XSingleton<XUpdater>.singleton.XPlatform.SetNoBackupFlag(text2);
 +							this._meta_awr.IsDone = true;
 +						}
 +					}
 +					catch (Exception ex)
 +					{
 +						this.OnDownloadFailed(ex.Message, this._meta_awr);
 +					}
 +				}).Start();
 +			}
 +			else
 +			{
 +				this.OnDownloadFailed(error, this._meta_awr);
 +			}
 +		}
 +
 +		private void OnDownloadFailed(string error, AsyncWriteRequest awr)
 +		{
 +			XSingleton<XDebug>.singleton.AddErrorLog("Download Meta ", awr.Name, " error: ", error, null, null);
 +			awr.HasError = true;
 +		}
 +
 +		private AsyncWriteRequest OnBundleDownload(WWW www, XBundleData bundle, string error)
 +		{
 +			AsyncWriteRequest req = new AsyncWriteRequest();
 +			bool flag = string.IsNullOrEmpty(error);
 +			if (flag)
 +			{
 +				byte[] bs = www.bytes;
 +				new Thread((ThreadStart)delegate
 +				{
 +					req.Location = this.GetLocalPath(bundle);
 +					try
 +					{
 +						File.WriteAllBytes(req.Location, bs);
 +						req.IsDone = true;
 +					}
 +					catch (Exception ex)
 +					{
 +						this.OnDownloadFailed(ex.Message, req);
 +					}
 +				}).Start();
 +			}
 +			else
 +			{
 +				this.OnDownloadFailed(error, req);
 +			}
 +			return req;
 +		}
 +
 +		internal string CalculateMD5(byte[] bundle)
 +		{
 +			byte[] value = this._md5Generator.ComputeHash(bundle);
 +			return BitConverter.ToString(value);
 +		}
 +
 +		internal string CalculateMD5(byte[] bundle, int offset, int count)
 +		{
 +			byte[] value = this._md5Generator.ComputeHash(bundle, offset, count);
 +			return BitConverter.ToString(value);
 +		}
 +
 +		public bool CheckFileSize(string filePath, long fileSize)
 +		{
 +			bool result;
 +			try
 +			{
 +				bool flag = !File.Exists(filePath);
 +				if (flag)
 +				{
 +					result = false;
 +				}
 +				else
 +				{
 +					FileInfo fileInfo = new FileInfo(filePath);
 +					result = (fileSize == fileInfo.Length);
 +				}
 +			}
 +			catch (Exception ex)
 +			{
 +				XSingleton<XDebug>.singleton.AddErrorLog("XCaching.CheckFileSize: " + ex.Message, null, null, null, null, null);
 +				result = false;
 +			}
 +			return result;
 +		}
 +
 +		public override void Uninit()
 +		{
 +		}
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XCaching.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XCaching.cs.meta new file mode 100644 index 00000000..6ab14d04 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XCaching.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e212f5e587fc78e44bfa392acdcc623d +timeCreated: 1611465800 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XDownloader.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XDownloader.cs new file mode 100644 index 00000000..00e347ae --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XDownloader.cs @@ -0,0 +1,149 @@ +using System;
 +using System.Collections;
 +using System.Text;
 +using UnityEngine;
 +using XUtliPoolLib;
 +
 +namespace XUpdater
 +{
 +	public sealed class XDownloader : MonoBehaviour
 +	{
 +		private StringBuilder _log = new StringBuilder();
 +
 +		private WWW _downloader = null;
 +
 +		private bool _download = true;
 +
 +		private uint _token = 0u;
 +
 +		private float _total_percent = 0f;
 +
 +		private string _current_name = null;
 +
 +		private XTimerMgr.ElapsedEventHandler _progressCb = null;
 +
 +		public delegate void HandleBytesDownload(WWW www, string error);
 +
 +		private void Awake()
 +		{
 +			this._progressCb = new XTimerMgr.ElapsedEventHandler(this.Progress);
 +		}
 +
 +		internal void GetBundle(XBundleData bundle, string url, HandleBundleDownload callback1, HandleFetchBundle callback2, float percent)
 +		{
 +			this._download = url.Contains("?token=");
 +			this._current_name = bundle.Name;
 +			this._total_percent = percent;
 +			base.StartCoroutine(this.Download(bundle, url, callback1, callback2));
 +		}
 +
 +		public void GetMeta(string url, string name, XDownloader.HandleBytesDownload callback, float percent)
 +		{
 +			this._download = true;
 +			this._current_name = name;
 +			this._total_percent = percent;
 +			base.StartCoroutine(this.MetaDownload(url, callback));
 +		}
 +
 +		public void GetBytes(string url, XDownloader.HandleBytesDownload callback)
 +		{
 +			base.StartCoroutine(this.BytesDownload(url, callback));
 +		}
 +
 +		private IEnumerator MetaDownload(string url, XDownloader.HandleBytesDownload callback)
 +		{
 +			XSingleton<XTimerMgr>.singleton.KillTimer(this._token);
 +			this._token = XSingleton<XTimerMgr>.singleton.SetTimer(0.1f, this._progressCb, null);
 +			this._downloader = new WWW(url);
 +			yield return this._downloader;
 +			XSingleton<XTimerMgr>.singleton.KillTimer(this._token);
 +			this.Progress(null);
 +			XSingleton<XTimerMgr>.singleton.KillTimer(this._token);
 +			bool flag = callback != null;
 +			if (flag)
 +			{
 +				callback(this._downloader, this._downloader.error);
 +			}
 +			this._downloader.Dispose();
 +			this._downloader = null;
 +			yield break;
 +		}
 +
 +		private IEnumerator BytesDownload(string url, XDownloader.HandleBytesDownload callback)
 +		{
 +			WWW www = new WWW(url);
 +			yield return www;
 +			bool flag = callback != null;
 +			if (flag)
 +			{
 +				callback(www, www.error);
 +			}
 +			www.Dispose();
 +			www = null;
 +			yield break;
 +		}
 +
 +		private IEnumerator Download(XBundleData bundle, string url, HandleBundleDownload callback1, HandleFetchBundle callback2)
 +		{
 +			XSingleton<XTimerMgr>.singleton.KillTimer(this._token);
 +			this._token = XSingleton<XTimerMgr>.singleton.SetTimer(0.1f, this._progressCb, null);
 +			this._downloader = new WWW(url);
 +			yield return this._downloader;
 +			XSingleton<XTimerMgr>.singleton.KillTimer(this._token);
 +			this.Progress(null);
 +			XSingleton<XTimerMgr>.singleton.KillTimer(this._token);
 +			bool error = false;
 +			bool flag = callback1 != null;
 +			if (flag)
 +			{
 +				AsyncWriteRequest awr = callback1(this._downloader, bundle, this._downloader.error);
 +				while (!awr.IsDone)
 +				{
 +					bool hasError = awr.HasError;
 +					if (hasError)
 +					{
 +						error = true;
 +						break;
 +					}
 +					yield return null;
 +				}
 +				XSingleton<XUpdater>.singleton.XPlatform.SetNoBackupFlag(awr.Location);
 +				awr = null;
 +			}
 +			bool flag2 = error;
 +			if (flag2)
 +			{
 +				this._log.Length = 0;
 +				this._log.AppendFormat(XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_DOWNLOADRESFAILED"), bundle.Name);
 +				XSingleton<XLoadingUI>.singleton.SetStatus(this._log.ToString(), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +			}
 +			else
 +			{
 +				bool flag3 = callback2 != null;
 +				if (flag3)
 +				{
 +					callback2(this._downloader, this._downloader.bytes, bundle, this._download);
 +				}
 +			}
 +			this._downloader = null;
 +			yield break;
 +		}
 +
 +		private void Progress(object o)
 +		{
 +			this._log.Remove(0, this._log.Length);
 +			int num = Mathf.FloorToInt(this._total_percent * 100f);
 +			bool download = this._download;
 +			if (download)
 +			{
 +				this._log.AppendFormat(XSingleton<XStringTable>.singleton.GetString("XUPDATE_INFO_DOWNLOADING"), num);
 +			}
 +			else
 +			{
 +				this._log.AppendFormat(XSingleton<XStringTable>.singleton.GetString("XUPDATE_INFO_EXTRACTING"), num);
 +			}
 +			XSingleton<XLoadingUI>.singleton.SetStatus(this._log.ToString(), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +			this._token = XSingleton<XTimerMgr>.singleton.SetTimer(0.1f, this._progressCb, o);
 +		}
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XDownloader.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XDownloader.cs.meta new file mode 100644 index 00000000..637a01b8 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XDownloader.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 011390f5919ea604ba6a551c2601f729 +timeCreated: 1611465284 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XLaunchMode.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XLaunchMode.cs new file mode 100644 index 00000000..9b9e8e8e --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XLaunchMode.cs @@ -0,0 +1,11 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	public enum XLaunchMode
 +	{
 +		Live = 100,
 +		PreProduct,
 +		Dev = 200
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XLaunchMode.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XLaunchMode.cs.meta new file mode 100644 index 00000000..e559afb3 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XLaunchMode.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a9dca030da976a842a72f0ce356aa6a5 +timeCreated: 1611465740 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XLoadingUI.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XLoadingUI.cs new file mode 100644 index 00000000..b74f8e39 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XLoadingUI.cs @@ -0,0 +1,238 @@ +using System;
 +using UILib;
 +using UnityEngine;
 +using XUtliPoolLib;
 +
 +namespace XUpdater
 +{
 +	internal class XLoadingUI : XSingleton<XLoadingUI>
 +	{
 +		private IXUISprite JY;
 +
 +		private IXUISprite Black;
 +
 +		private IXUITweenTool JYPlayTween;
 +
 +		private IXUITweenTool BlackPlayTween;
 +
 +		private IXUILabel StatusText;
 +
 +		private IXUILabel VersionText;
 +
 +		private IXUISprite ClickBox;
 +
 +		public bool LoadingOK = false;
 +
 +		private bool TweenOK = false;
 +
 +		private Transform mTextureTransform;
 +
 +		private Transform mDialogTransform;
 +
 +		private IXUIButton mDialogSureBtn;
 +
 +		private IXUIButton mDialogCancelBtn;
 +
 +		private IXUILabel mDialogCapacityLabel;
 +
 +		private IXUITexture mDownLoadTexture;
 +
 +		private IXUIButton mDownLoadNewBtn;
 +
 +		private Transform mDownLoadTransform;
 +
 +		private XLoadingUI.OnSureCallBack mDialogCallBack;
 +
 +		private XLoadingUI.OnSureCallBack mDialogCancelCallBack;
 +
 +		private XLoadingUI.OnSureCallBack mDownCallBack;
 +
 +		public delegate void OnSureCallBack();
 +
 +		public override bool Init()
 +		{
 +			PlayerPrefs.SetString("Language", "Language");
 +			GameObject gameObject = GameObject.Find("UIRoot/StartLoadingDlg/Bg/Ailin");
 +			GameObject gameObject2 = GameObject.Find("UIRoot/StartLoadingDlg/Bg/JY");
 +			GameObject gameObject3 = GameObject.Find("UIRoot/StartLoadingDlg/Bg").transform.Find("Black").gameObject;
 +			this.StatusText = (GameObject.Find("UIRoot/StartLoadingDlg/Bg/LabelStatus").GetComponent("XUILabel") as IXUILabel);
 +			this.VersionText = (GameObject.Find("UIRoot/StartLoadingDlg/Bg/LabelVersion").GetComponent("XUILabel") as IXUILabel);
 +			this.JY = (gameObject2.GetComponent("XUISprite") as IXUISprite);
 +			this.Black = (gameObject3.GetComponent("XUISprite") as IXUISprite);
 +			this.JYPlayTween = (gameObject2.GetComponent("XUIPlayTween") as IXUITweenTool);
 +			this.BlackPlayTween = (gameObject3.GetComponent("XUIPlayTween") as IXUITweenTool);
 +			this.JYPlayTween.SetTargetGameObject(gameObject2);
 +			this.JYPlayTween.RegisterOnFinishEventHandler(new OnTweenFinishEventHandler(this.OnJYPlayTweenFinish));
 +			this.Black.SetVisible(true);
 +			this.BlackPlayTween.SetTargetGameObject(gameObject3);
 +			this.BlackPlayTween.RegisterOnFinishEventHandler(new OnTweenFinishEventHandler(this.OnBlackPlayTweenFinish));
 +			this.StatusText.SetVisible(false);
 +			this.VersionText.SetVisible(false);
 +			this.Black.SetVisible(false);
 +			this.JY.SetVisible(true);
 +			this.JYPlayTween.PlayTween(true, -1f);
 +			this.ClickBox = (GameObject.Find("UIRoot/StartLoadingDlg/Bg").GetComponent("XUISprite") as IXUISprite);
 +			this.ClickBox.RegisterSpriteClickEventHandler(new SpriteClickEventHandler(this.OnBoxClick));
 +			this.mTextureTransform = GameObject.Find("UIRoot/StartLoadingDlg/Bg/Texture").transform;
 +			this.mDialogTransform = GameObject.Find("UIRoot/StartLoadingDlg/Bg/Dialog").transform;
 +			this.mDialogSureBtn = (this.mDialogTransform.Find("OK").GetComponent("XUIButton") as IXUIButton);
 +			this.mDialogCancelBtn = (this.mDialogTransform.Find("Cancel").GetComponent("XUIButton") as IXUIButton);
 +			this.mDialogCapacityLabel = (this.mDialogTransform.Find("CapacityValue").GetComponent("XUILabel") as IXUILabel);
 +			this.mDialogSureBtn.RegisterClickEventHandler(new ButtonClickEventHandler(this.OnDialogSureClick));
 +			this.mDialogCancelBtn.RegisterClickEventHandler(new ButtonClickEventHandler(this.OnDialogCancelClick));
 +			this.mTextureTransform.gameObject.SetActive(false);
 +			this.mDialogTransform.gameObject.SetActive(false);
 +			this.mDownLoadTransform = GameObject.Find("UIRoot/StartLoadingDlg/Bg/DownNew").transform;
 +			this.mDownLoadTexture = (this.mDownLoadTransform.Find("Pic").GetComponent("XUITexture") as IXUITexture);
 +			this.mDownLoadNewBtn = (this.mDownLoadTransform.Find("OK").GetComponent("XUIButton") as IXUIButton);
 +			this.mDownLoadTransform.gameObject.SetActive(false);
 +			this.mDownLoadNewBtn.RegisterClickEventHandler(new ButtonClickEventHandler(this.OnDownLoadCallback));
 +			return true;
 +		}
 +
 +		public bool OnDialogSureClick(IXUIButton btn)
 +		{
 +			this.mDialogTransform.gameObject.SetActive(false);
 +			bool flag = this.mDialogCallBack != null;
 +			if (flag)
 +			{
 +				this.mDialogCallBack();
 +			}
 +			return true;
 +		}
 +
 +		public bool OnDialogCancelClick(IXUIButton btn)
 +		{
 +			this.mDialogTransform.gameObject.SetActive(false);
 +			bool flag = this.mDialogCancelCallBack != null;
 +			if (flag)
 +			{
 +				this.mDialogCancelCallBack();
 +			}
 +			return true;
 +		}
 +
 +		public bool OnDownLoadCallback(IXUIButton btn)
 +		{
 +			this.mDownLoadTransform.gameObject.SetActive(false);
 +			bool flag = this.mDownCallBack != null;
 +			if (flag)
 +			{
 +				this.mDownCallBack();
 +			}
 +			return true;
 +		}
 +
 +		public void OnBoxClick(IXUISprite sp)
 +		{
 +			XSingleton<XUpdater>.singleton.OnRetry();
 +		}
 +
 +		private void OnBlackPlayTweenFinish(IXUITweenTool iPlayTween)
 +		{
 +			XSingleton<XUpdater>.singleton.Phase = eUPdatePhase.xUP_Finish;
 +		}
 +
 +		private void OnAilinPlayTweenFinish(IXUITweenTool iPlayTween)
 +		{
 +			this.TweenOK = true;
 +		}
 +
 +		private void OnJYPlayTweenFinish(IXUITweenTool iPlayTween)
 +		{
 +			this.JY.SetVisible(false);
 +			this.mTextureTransform.gameObject.SetActive(true);
 +			this.TweenOK = true;
 +			XSingleton<XUpdater>.singleton.Begin();
 +		}
 +
 +		private void LoadFinishClean()
 +		{
 +			this.JY = null;
 +			this.Black = null;
 +			this.JYPlayTween = null;
 +			this.BlackPlayTween = null;
 +			this.StatusText = null;
 +			this.VersionText = null;
 +			this.ClickBox = null;
 +			this.mDialogCallBack = null;
 +			this.mDialogCancelCallBack = null;
 +			this.mDialogCancelBtn = null;
 +			this.mDialogSureBtn = null;
 +			this.mDialogCapacityLabel = null;
 +			this.mDialogTransform = null;
 +			this.mDownLoadNewBtn = null;
 +			this.mDownLoadTransform = null;
 +		}
 +
 +		public void SetDialog(ulong capacity, XLoadingUI.OnSureCallBack sureCallBack, XLoadingUI.OnSureCallBack cancelCallBack)
 +		{
 +			this.mDialogCallBack = sureCallBack;
 +			this.mDialogCancelCallBack = cancelCallBack;
 +			this.mDialogTransform.gameObject.SetActive(true);
 +			this.mDialogCapacityLabel.SetText(this.GetCapacityValue(capacity));
 +		}
 +
 +		public void SetDownLoad(XLoadingUI.OnSureCallBack sureCallBack, Texture tex)
 +		{
 +			this.mDownCallBack = sureCallBack;
 +			this.mDownLoadTransform.gameObject.SetActive(true);
 +			bool flag = tex != null;
 +			if (flag)
 +			{
 +				this.mDownLoadTexture.SetRuntimeTex(tex, true);
 +			}
 +		}
 +
 +		private string GetCapacityValue(ulong capacity)
 +		{
 +			bool flag = capacity < 1048576UL;
 +			string result;
 +			if (flag)
 +			{
 +				result = string.Format("{0}K", (capacity / 1024UL).ToString("F2"));
 +			}
 +			else
 +			{
 +				result = string.Format("{0}M", (capacity / 1024UL / 1024UL).ToString("F2"));
 +			}
 +			return result;
 +		}
 +
 +		public void SetStatus(string text, byte r = 255, byte g = 255, byte b = 255)
 +		{
 +			bool flag = !this.StatusText.IsVisible();
 +			if (flag)
 +			{
 +				this.StatusText.SetVisible(true);
 +			}
 +			this.StatusText.SetColor(new Color32(r, g, b, byte.MaxValue));
 +			this.StatusText.SetText(text);
 +		}
 +
 +		public void SetVersion(string text)
 +		{
 +			bool flag = !this.VersionText.IsVisible();
 +			if (flag)
 +			{
 +				this.VersionText.SetVisible(true);
 +			}
 +			this.VersionText.SetText(text);
 +		}
 +
 +		public void OnUpdate()
 +		{
 +			bool flag = this.TweenOK && this.LoadingOK;
 +			if (flag)
 +			{
 +				this.TweenOK = (this.LoadingOK = false);
 +				XSingleton<XUpdater>.singleton.Phase = eUPdatePhase.xUP_Finish;
 +				this.LoadFinishClean();
 +			}
 +		}
 +
 +		public override void Uninit()
 +		{
 +		}
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XLoadingUI.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XLoadingUI.cs.meta new file mode 100644 index 00000000..622cc014 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XLoadingUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3a2909fecca65674ead27371201b0a69 +timeCreated: 1611465631 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XMetaResPackage.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XMetaResPackage.cs new file mode 100644 index 00000000..61145a31 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XMetaResPackage.cs @@ -0,0 +1,16 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	[Serializable]
 +	public class XMetaResPackage
 +	{
 +		public string download;
 +
 +		public string buildinpath;
 +
 +		public string bundle;
 +
 +		public uint Size;
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XMetaResPackage.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XMetaResPackage.cs.meta new file mode 100644 index 00000000..f88076a3 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XMetaResPackage.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 40e229542a04c8b4e963b01fdd9911d4 +timeCreated: 1611465635 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XResPackage.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XResPackage.cs new file mode 100644 index 00000000..55d3277e --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XResPackage.cs @@ -0,0 +1,16 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	[Serializable]
 +	public class XResPackage
 +	{
 +		public string location;
 +
 +		public string type;
 +
 +		public string bundle;
 +
 +		public ResourceType rtype = ResourceType.Assets;
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XResPackage.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XResPackage.cs.meta new file mode 100644 index 00000000..05281744 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XResPackage.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: de0d4b26a3f172d4bb888f7450d92e37 +timeCreated: 1611465797 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XShell.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XShell.cs new file mode 100644 index 00000000..81f4ee45 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XShell.cs @@ -0,0 +1,229 @@ +using System;
 +using System.Reflection;
 +using UnityEngine;
 +using UnityEngine.SceneManagement;
 +using XUtliPoolLib;
 +
 +namespace XUpdater
 +{
 +	public sealed class XShell : XSingleton<XShell>
 +	{
 +		public bool Pause
 +		{
 +			get
 +			{
 +				return this._bPause;
 +			}
 +			set
 +			{
 +				bool isDone = XSingleton<XUpdater>.singleton.IsDone;
 +				if (isDone)
 +				{
 +					this._bPauseTrigger = value;
 +				}
 +			}
 +		}
 +
 +		public float CurrentTimeMagic
 +		{
 +			get
 +			{
 +				return Time.timeScale;
 +			}
 +		}
 +
 +		public static readonly int TargetFrame = 30;
 +
 +		private float _time_scale = 1f;
 +
 +		private bool _bPause = false;
 +
 +		private bool _bPauseTrigger = false;
 +
 +		private IEntrance _entrance = null;
 +
 +		public void PreLaunch()
 +		{
 +			this._entrance.Awake();
 +			bool flag = this._entrance != null;
 +			if (flag)
 +			{
 +				IPlatform xplatform = XSingleton<XUpdater>.singleton.XPlatform;
 +				bool flag2 = xplatform != null;
 +				if (flag2)
 +				{
 +					this._entrance.SetQualityLevel(xplatform.GetQualityLevel());
 +				}
 +			}
 +		}
 +
 +		public void Launch()
 +		{
 +			this._entrance.Awake();
 +		}
 +
 +		public bool Launched()
 +		{
 +			return this._entrance.Awaked;
 +		}
 +
 +		public void StartGame()
 +		{
 +			this._entrance.Start();
 +		}
 +
 +		public void Awake()
 +		{
 +			bool flag = !XSingleton<XUpdater>.singleton.IsDone;
 +			if (flag)
 +			{
 +				XSingleton<XUpdater>.singleton.Init();
 +			}
 +		}
 +
 +		public void Start()
 +		{
 +			Screen.sleepTimeout = -1;
 +			Application.targetFrameRate = -1;
 +		}
 +
 +		private void NetUpdate()
 +		{
 +			this._entrance.NetUpdate();
 +		}
 +
 +		public void PreUpdate()
 +		{
 +			this.NetUpdate();
 +			bool pause = this.Pause;
 +			if (!pause)
 +			{
 +				this._entrance.PreUpdate();
 +			}
 +		}
 +
 +		public void Update()
 +		{
 +			bool isDone = XSingleton<XUpdater>.singleton.IsDone;
 +			if (isDone)
 +			{
 +				XSingleton<XTimerMgr>.singleton.updateStartTime = Time.time;
 +				this.PreUpdate();
 +				bool pause = this.Pause;
 +				if (!pause)
 +				{
 +					bool update = XSingleton<XTimerMgr>.singleton.update;
 +					if (update)
 +					{
 +						XSingleton<XTimerMgr>.singleton.Update(Time.deltaTime);
 +					}
 +					bool needFixedUpdate = XSingleton<XTimerMgr>.singleton.NeedFixedUpdate;
 +					if (needFixedUpdate)
 +					{
 +						XSingleton<XResourceLoaderMgr>.singleton.Update(Time.deltaTime);
 +					}
 +					XSingleton<XEngineCommandMgr>.singleton.Update();
 +					this._entrance.Update();
 +				}
 +			}
 +			else
 +			{
 +				XSingleton<XTimerMgr>.singleton.Update(Time.deltaTime);
 +				XSingleton<XUpdater>.singleton.Update();
 +			}
 +		}
 +
 +		public void PostUpdate()
 +		{
 +			bool isDone = XSingleton<XUpdater>.singleton.IsDone;
 +			if (isDone)
 +			{
 +				this.PauseChecker();
 +				this._entrance.FadeUpdate();
 +				bool pause = this.Pause;
 +				if (pause)
 +				{
 +					return;
 +				}
 +				this._entrance.PostUpdate();
 +				XSingleton<XTimerMgr>.singleton.PostUpdate();
 +			}
 +			bool reboot = XSingleton<XUpdater>.singleton.Reboot;
 +			if (reboot)
 +			{
 +				this.Quit();
 +				SceneManager.LoadScene(0);
 +			}
 +		}
 +
 +		public void Quit()
 +		{
 +			bool isDone = XSingleton<XUpdater>.singleton.IsDone;
 +			if (isDone)
 +			{
 +				this._entrance.Quit();
 +			}
 +			XSingleton<XUpdater>.singleton.Uninit();
 +		}
 +
 +		public void MakeEntrance(Assembly main)
 +		{
 +			Type type = main.GetType("XMainClient.XGameEntrance");
 +			MethodInfo method = type.GetMethod("Fire");
 +			method.Invoke(null, null);
 +			this._entrance = XSingleton<XInterfaceMgr>.singleton.GetInterface<IEntrance>(0u);
 +		}
 +
 +		//!
 +		public void _MakeEntrance()
 +		{
 +			XMainClient.XGameEntrance.Fire();
 +			this._entrance = XSingleton<XInterfaceMgr>.singleton.GetInterface<IEntrance>(0u);
 +		}
 +
 +		public float TimeMagic(float value)
 +		{
 +			bool flag = Time.timeScale == 1f && !this._bPause;
 +			if (flag)
 +			{
 +				Time.timeScale = value;
 +				this._time_scale = value;
 +			}
 +			return Time.timeScale;
 +		}
 +
 +		public void TimeMagicBack()
 +		{
 +			Time.timeScale = 1f;
 +			this._time_scale = 1f;
 +		}
 +
 +		private void PauseChecker()
 +		{
 +			bool flag = this._bPause == this._bPauseTrigger;
 +			if (!flag)
 +			{
 +				this._bPause = this._bPauseTrigger;
 +				Time.timeScale = (this._bPause ? 0f : this._time_scale);
 +			}
 +		}
 +
 +		public override bool Init()
 +		{
 +			return true;
 +		}
 +
 +		public override void Uninit()
 +		{
 +		}
 +
 +		public void MonoObjectRegister(string key, MonoBehaviour behavior)
 +		{
 +			bool flag = this._entrance != null;
 +			if (flag)
 +			{
 +				this._entrance.MonoObjectRegister(key, behavior);
 +			}
 +		}
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XShell.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XShell.cs.meta new file mode 100644 index 00000000..d224cbd8 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XShell.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 28fb5d2f5ca05b943a403b7e467f69b8 +timeCreated: 1611465302 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XUpdater.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XUpdater.cs new file mode 100644 index 00000000..dba75741 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XUpdater.cs @@ -0,0 +1,1644 @@ +using System;
 +using System.Collections;
 +using System.Collections.Generic;
 +using System.IO;
 +using System.Reflection;
 +using System.Text;
 +using System.Threading;
 +using System.Xml.Serialization;
 +using UnityEngine;
 +using XUtliPoolLib;
 +
 +namespace XUpdater
 +{
 +	public sealed class XUpdater : XSingleton<XUpdater>
 +	{
 +		public static XLaunchMode LaunchMode
 +		{
 +			get
 +			{
 +				return XUpdater._launch_mode;
 +			}
 +		}
 +
 +		public bool EditorMode
 +		{
 +			get
 +			{
 +				return this._bEditorMode;
 +			}
 +		}
 +
 +		public string Version
 +		{
 +			get
 +			{
 +				return this._version;
 +			}
 +		}
 +
 +		public string TargetVersion
 +		{
 +			get
 +			{
 +				return this._target_version;
 +			}
 +		}
 +
 +		public bool NeedCheckFile
 +		{
 +			get
 +			{
 +				return this._need_check_file;
 +			}
 +		}
 +
 +		public BuildTarget RunTimePlatform
 +		{
 +			get
 +			{
 +				return this._runtime_platform;
 +			}
 +		}
 +
 +		public string Platform
 +		{
 +			get
 +			{
 +				return this._platform_name;
 +			}
 +		}
 +
 +		public IPlatform XPlatform
 +		{
 +			get
 +			{
 +				return this._platform;
 +			}
 +		}
 +
 +		public ILuaEngine XLuaEngine
 +		{
 +			get
 +			{
 +				return this._lua_engine;
 +			}
 +		}
 +
 +		public IApolloManager XApolloManager
 +		{
 +			get
 +			{
 +				return this._apolloManager;
 +			}
 +		}
 +
 +		public IBroardcast XBroadCast
 +		{
 +			get
 +			{
 +				return this._broadcast;
 +			}
 +		}
 +
 +		public ITssSdk XTssSdk
 +		{
 +			get
 +			{
 +				return this._tssSdk;
 +			}
 +		}
 +
 +		public IXPandoraMgr XPandoraManager
 +		{
 +			get
 +			{
 +				return this._pandoraManager;
 +			}
 +		}
 +
 +		public IXGameSirControl GameSirControl
 +		{
 +			get
 +			{
 +				return this._SirControl;
 +			}
 +		}
 +
 +		public IResourceHelp XResourceHelp
 +		{
 +			get
 +			{
 +				return this._resourcehelp;
 +			}
 +		}
 +
 +		public bool IsDone
 +		{
 +			get
 +			{
 +				return this._update_done;
 +			}
 +		}
 +
 +		internal eUPdatePhase Phase
 +		{
 +			set
 +			{
 +				this._phase = value;
 +			}
 +		}
 +
 +		public int ManagedThreadId
 +		{
 +			get
 +			{
 +				return this._main_threadId;
 +			}
 +		}
 +
 +		public bool Reboot { get; set; }
 +
 +		public static readonly uint Major_Version = 1u;
 +
 +		private static XLaunchMode _launch_mode = XLaunchMode.Live;
 +
 +		public static GameObject XGameRoot = null;
 +
 +		public static Assembly Ass = Assembly.GetAssembly(typeof(GameObject));
 +
 +		public static int Md5Length = 16;
 +
 +		private int _main_threadId = 0;
 +
 +		private bool _bEditorMode = false;
 +
 +		private bool _bFetchVersion = false;
 +
 +		private bool _bFetchServer = false;
 +
 +		private StringBuilder _log = new StringBuilder();
 +
 +		private IEnumerator _downloader = null;
 +
 +		private IEnumerator _download_prepare = null;
 +
 +		private IEnumerator _comparer = null;
 +
 +		private IEnumerator _launcher = null;
 +
 +		private IEnumerator _finish = null;
 +
 +		private byte[] _script = null;
 +
 +		private bool _on_file_download_retry = false;
 +
 +		private bool _on_file_download_need_retry = false;
 +
 +		private bool _update_done = false;
 +
 +		private bool _bundle_fetching = false;
 +
 +		private bool _asset_loading = false;
 +
 +		private XVersion _version_getter = null;
 +
 +		private XBundle _bundle_getter = null;
 +
 +		private XFileLog _filelog_getter = null;
 +
 +		private IFMOD_Listener _fmod_listenter = null;
 +
 +		private ITssSdk _tssSdk = null;
 +
 +		private IApolloManager _apolloManager = null;
 +
 +		private IBroardcast _broadcast = null;
 +
 +		private ILuaEngine _lua_engine = null;
 +
 +		private IXPandoraMgr _pandoraManager = null;
 +
 +		private IXGameSirControl _SirControl = null;
 +
 +		private IXVideo _video = null;
 +
 +		private IPlatform _platform = null;
 +
 +		private BuildTarget _runtime_platform = BuildTarget.Unknown;
 +
 +		private string _platform_name = "";
 +
 +		private string _version = "0.0.0";
 +
 +		private string _target_version = "0.0.0";
 +
 +		private bool _need_check_file = false;
 +
 +		private bool _need_play_cg = true;
 +
 +		private XFetchVersionNetwork _fetch_version_network = null;
 +
 +		private float _fetch_version_time = 0f;
 +
 +		private ulong _update_pakcage_size = 0UL;
 +
 +		private XVersionData _server = null;
 +
 +		private XVersionData _client = null;
 +
 +		private XVersionData _buildin = null;
 +
 +		private IResourceHelp _resourcehelp = null;
 +
 +		private XBundleData _bundle_data = null;
 +
 +		private eUPdatePhase _phase = eUPdatePhase.xUP_None;
 +
 +		private List<XBundleData> _download_bundle = new List<XBundleData>();
 +
 +		private List<XBundleData> _cacheload_bundle = new List<XBundleData>();
 +
 +		private List<XMetaResPackage> _meta_bundle = new List<XMetaResPackage>();
 +
 +		private Dictionary<uint, UnityEngine.Object> _persist_assets = new Dictionary<uint, UnityEngine.Object>();
 +
 +		private Dictionary<uint, byte[]> _persist_image = new Dictionary<uint, byte[]>();
 +
 +		private Dictionary<uint, XBundleData> _assets = new Dictionary<uint, XBundleData>();
 +
 +		private Dictionary<uint, XResPackage> _res_list = new Dictionary<uint, XResPackage>();
 +
 +		private Dictionary<uint, AssetBundle> _bundles = new Dictionary<uint, AssetBundle>();
 +
 +		public AssetBundleManager ABManager;
 +
 +		private bool _is_download_update_pic = false;
 +
 +		public override bool Init()
 +		{
 +			this._main_threadId = Thread.CurrentThread.ManagedThreadId;
 +			this._bEditorMode = ((int)Application.platform == 7 || (int)Application.platform == 0 || (int)Application.platform == 2);
 +			this.Reboot = false;
 +			XUpdater.XGameRoot = GameObject.Find("XGamePoint");
 +			this.GetLaunchMode();
 +			RuntimePlatform platform = Application.platform;
 +			if ((int)platform != 8)
 +			{
 +				if ((int)platform != 11)
 +				{
 +					this._runtime_platform = BuildTarget.Standalone;
 +					this._platform_name = (this.PatchPrefix() ?? "");
 +				}
 +				else
 +				{
 +					this._runtime_platform = BuildTarget.Android;
 +					this._platform_name = this.PatchPrefix() + "Android/";
 +				}
 +			}
 +			else
 +			{
 +				this._runtime_platform = BuildTarget.IOS;
 +				this._platform_name = this.PatchPrefix() + "IOS/";
 +			}
 +			this._version_getter = XUpdater.XGameRoot.AddComponent<XVersion>();
 +			this._bundle_getter = XUpdater.XGameRoot.AddComponent<XBundle>();
 +			this._filelog_getter = XUpdater.XGameRoot.AddComponent<XFileLog>();
 +			this._fmod_listenter = (GameObject.Find("Main Camera").GetComponent("FMOD_Listener") as IFMOD_Listener);
 +			this._tssSdk = (XUpdater.XGameRoot.GetComponent("TssSDKManager") as ITssSdk);
 +			this._apolloManager = (XUpdater.XGameRoot.GetComponent("ApolloManager") as IApolloManager);
 +			this._broadcast = (XUpdater.XGameRoot.GetComponent("BroadcastManager") as IBroardcast);
 +			this._platform = (XUpdater.XGameRoot.GetComponent("XPlatform") as IPlatform);
 +			this._video = (XUpdater.XGameRoot.GetComponent("XVideoMgr") as IXVideo);
 +			this._lua_engine = (XUpdater.XGameRoot.GetComponent("LuaEngine") as ILuaEngine);
 +			this._pandoraManager = (XUpdater.XGameRoot.GetComponent("XPandoraMgr") as IXPandoraMgr);
 +			this._SirControl = (XUpdater.XGameRoot.GetComponent("XGameSirControl") as IXGameSirControl);
 +			bool flag = this._SirControl != null;
 +			if (flag)
 +			{
 +				this._SirControl.Init();
 +			}
 +			this.ABManager = XUpdater.XGameRoot.AddComponent<AssetBundleManager>();
 +			this.ABManager.Init();
 +			XSingleton<XDebug>.singleton.Init(this._platform, this._filelog_getter);
 +			XSingleton<XCaching>.singleton.Init();
 +			XSingleton<XLoadingUI>.singleton.Init();
 +			XBinaryReader.Init();
 +			UnityEngine.Object.DontDestroyOnLoad(XUpdater.XGameRoot);
 +			return true;
 +		}
 +
 +		public override void Uninit()
 +		{
 +			foreach (AssetBundle assetBundle in this._bundles.Values)
 +			{
 +				assetBundle.Unload(false);
 +			}
 +			this._assets.Clear();
 +			this._persist_assets.Clear();
 +			this._bundles.Clear();
 +			this._res_list.Clear();
 +			bool flag = this._video != null && this._video.isPlaying;
 +			if (flag)
 +			{
 +				this._video.Stop();
 +			}
 +			this._phase = eUPdatePhase.xUP_Prepare;
 +			this._update_done = false;
 +			bool flag2 = this._fetch_version_network != null;
 +			if (flag2)
 +			{
 +				this._fetch_version_network.Close();
 +			}
 +			UnityEngine.Object.Destroy(XUpdater.XGameRoot);
 +		}
 +
 +		public void Clear()
 +		{
 +			foreach (KeyValuePair<uint, AssetBundle> keyValuePair in this._bundles)
 +			{
 +				AssetBundle value = keyValuePair.Value;
 +				value.Unload(false);
 +			}
 +			this._bundles.Clear();
 +		}
 +
 +		public void Update()
 +		{
 +			switch (this._phase)
 +			{
 +			case eUPdatePhase.xUP_Prepare:
 +			{
 +				bool flag = this.Preparing();
 +				if (flag)
 +				{
 +					this._phase = eUPdatePhase.xUP_FetchVersion;
 +				}
 +				else
 +				{
 +					XSingleton<XLoadingUI>.singleton.SetStatus(XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_FETCHLOCALVERSIONERROR"), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +					this.OnError();
 +				}
 +				break;
 +			}
 +			case eUPdatePhase.xUP_FetchVersion:
 +			{
 +				bool flag2 = !this._bFetchVersion;
 +				if (flag2)
 +				{
 +					bool flag3 = this._fetch_version_network == null;
 +					if (flag3)
 +					{
 +						this._fetch_version_network = new XFetchVersionNetwork();
 +					}
 +					XSingleton<XLoadingUI>.singleton.SetStatus(XSingleton<XStringTable>.singleton.GetString("XUPDATE_INFO_FETCHVERSION"), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +					this._fetch_version_network.Init();
 +					string host = XSingleton<XCaching>.singleton.VersionServer.Substring(0, XSingleton<XCaching>.singleton.VersionServer.LastIndexOf(':'));
 +					string s = XSingleton<XCaching>.singleton.VersionServer.Substring(XSingleton<XCaching>.singleton.VersionServer.LastIndexOf(':') + 1);
 +					bool flag4 = this._fetch_version_network.Connect(host, int.Parse(s));
 +					if (flag4)
 +					{
 +						this._bFetchVersion = true;
 +						this._fetch_version_time = Time.time;
 +					}
 +					else
 +					{
 +						XSingleton<XLoadingUI>.singleton.SetStatus(XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_FETCHVERSIONERROR"), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +						XSingleton<XUpdater>.singleton.OnError();
 +						this._fetch_version_network.Close();
 +					}
 +				}
 +				else
 +				{
 +					bool flag5 = Time.time - this._fetch_version_time > 5f;
 +					if (flag5)
 +					{
 +						XSingleton<XLoadingUI>.singleton.SetStatus(XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_FETCHVERSIONERROR"), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +						XSingleton<XUpdater>.singleton.OnError();
 +						this._fetch_version_network.Close();
 +					}
 +				}
 +				break;
 +			}
 +			case eUPdatePhase.xUP_LoadVersion:
 +			{
 +				bool flag6 = !this._bFetchServer;
 +				if (flag6)
 +				{
 +					this._cacheload_bundle.Clear();
 +					this._download_bundle.Clear();
 +					this._meta_bundle.Clear();
 +					this._version_getter.ServerDownload(new HandleVersionDownload(this.OnVersionDownloaded), new HandleVersionLoaded(this.OnVersionLoaded));
 +				}
 +				this._bFetchServer = true;
 +				break;
 +			}
 +			case eUPdatePhase.xUP_CompareVersion:
 +			{
 +				bool flag7 = this._comparer == null;
 +				if (flag7)
 +				{
 +					this._comparer = this.VersionComparer();
 +				}
 +				else
 +				{
 +					bool flag8 = !this._comparer.MoveNext();
 +					if (flag8)
 +					{
 +						this._comparer = null;
 +					}
 +				}
 +				break;
 +			}
 +			case eUPdatePhase.xUP_DownLoadBundle:
 +			{
 +				bool flag9 = this._downloader == null;
 +				if (flag9)
 +				{
 +					this._downloader = this.DownLoadBundles();
 +				}
 +				else
 +				{
 +					bool flag10 = !this._downloader.MoveNext();
 +					if (flag10)
 +					{
 +						this._downloader = null;
 +						this._phase = eUPdatePhase.xUP_ShowVersion;
 +					}
 +				}
 +				break;
 +			}
 +			case eUPdatePhase.xUP_ShowVersion:
 +				this.ShowVersionInfo(this._server, true);
 +				break;
 +			case eUPdatePhase.xUP_LaunchGame:
 +			{
 +				bool flag11 = this._launcher == null;
 +				if (flag11)
 +				{
 +					this._launcher = this.LaunchGame();
 +				}
 +				else
 +				{
 +					bool flag12 = !this._launcher.MoveNext();
 +					if (flag12)
 +					{
 +						this._launcher = null;
 +						this.OnEnding();
 +					}
 +				}
 +				break;
 +			}
 +			case eUPdatePhase.xUP_Finish:
 +			{
 +				bool flag13 = this._finish == null;
 +				if (flag13)
 +				{
 +					this._finish = this.Finish();
 +				}
 +				else
 +				{
 +					bool flag14 = !this._finish.MoveNext();
 +					if (flag14)
 +					{
 +						this._finish = null;
 +						this._update_done = true;
 +						XSingleton<XShell>.singleton.StartGame();
 +					}
 +				}
 +				break;
 +			}
 +			}
 +			XSingleton<XLoadingUI>.singleton.OnUpdate();
 +		}
 +
 +		public void Begin()
 +		{
 +			this._update_done = false;
 +			this._bFetchVersion = false;
 +			this._bFetchServer = false;
 +			bool flag = !XSingleton<XStringTable>.singleton.SyncInit();
 +			if (flag)
 +			{
 +				this._log.Remove(0, this._log.Length);
 +				this._log.Append("Error occurred when loading string table.");
 +				XSingleton<XLoadingUI>.singleton.SetStatus(this._log.ToString(), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +				XSingleton<XUpdater>.singleton.OnError();
 +			}
 +			else
 +			{
 +				bool flag2 = !this.CheckMemory();
 +				if (flag2)
 +				{
 +					this._log.Remove(0, this._log.Length);
 +					this._log.Append(XSingleton<XStringTable>.singleton.GetString("XUPDATE_INFO_EXCLUDE1GPHONE"));
 +					XSingleton<XLoadingUI>.singleton.SetStatus(this._log.ToString(), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +					XSingleton<XUpdater>.singleton.OnError();
 +				}
 +				else
 +				{
 +					bool flag3 = XSingleton<XCaching>.singleton.EnableCache();
 +					if (flag3)
 +					{
 +						this._phase = eUPdatePhase.xUP_Prepare;
 +					}
 +					else
 +					{
 +						this._log.Remove(0, this._log.Length);
 +						this._log.Append(XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_ACCESSDENIED"));
 +						XSingleton<XLoadingUI>.singleton.SetStatus(this._log.ToString(), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +						XSingleton<XUpdater>.singleton.OnError();
 +					}
 +				}
 +			}
 +		}
 +
 +		private IEnumerator Finish()
 +		{
 +			bool flag = this._server != null;
 +			if (flag)
 +			{
 +				this._server.Bundles.Clear();
 +				this._version = this._server.ToString();
 +			}
 +			this._server = null;
 +			this._client = null;
 +			this._buildin = null;
 +			bool flag2 = this._need_play_cg && this._video != null;
 +			if (flag2)
 +			{
 +				this._video.Play(false);
 +				yield return null;
 +				while (this._video.isPlaying)
 +				{
 +					yield return null;
 +				}
 +			}
 +			UnityEngine.Object.DestroyObject(this._version_getter);
 +			UnityEngine.Object.DestroyObject(this._bundle_getter);
 +			yield break;
 +		}
 +
 +		public void OnError()
 +		{
 +			this._phase = eUPdatePhase.xUP_Error;
 +		}
 +
 +		public void DevStart()
 +		{
 +			this._phase = eUPdatePhase.xUP_ShowVersion;
 +		}
 +
 +		public void OnRetry()
 +		{
 +			eUPdatePhase phase = this._phase;
 +			if (phase != eUPdatePhase.xUP_DownLoadBundle)
 +			{
 +				if (phase != eUPdatePhase.xUP_Finish)
 +				{
 +					if (phase == eUPdatePhase.xUP_Error)
 +					{
 +						bool flag = this._server == null;
 +						if (flag)
 +						{
 +							this.Begin();
 +						}
 +					}
 +				}
 +				else
 +				{
 +					bool isPlaying = this._video.isPlaying;
 +					if (isPlaying)
 +					{
 +						this._video.Stop();
 +					}
 +				}
 +			}
 +			else
 +			{
 +				bool on_file_download_need_retry = this._on_file_download_need_retry;
 +				if (on_file_download_need_retry)
 +				{
 +					this._on_file_download_retry = true;
 +				}
 +			}
 +		}
 +
 +		private void OnEnding()
 +		{
 +			XSingleton<XLoadingUI>.singleton.LoadingOK = true;
 +			this._download_bundle.Clear();
 +			this._cacheload_bundle.Clear();
 +			this._meta_bundle.Clear();
 +			this._phase = eUPdatePhase.xUP_Ending;
 +		}
 +
 +		public bool ContainRes(uint hash)
 +		{
 +			return this._res_list.ContainsKey(hash);
 +		}
 +
 +		public UnityEngine.Object ResourceLoad(uint hash)
 +		{
 +			UnityEngine.Object result = null;
 +			XResPackage xresPackage = null;
 +			bool flag = this._res_list != null && this._res_list.TryGetValue(hash, out xresPackage);
 +			if (flag)
 +			{
 +				bool flag2 = !this._persist_assets.TryGetValue(hash, out result);
 +				if (flag2)
 +				{
 +					AssetBundle assetBundle = null;
 +					uint key = XSingleton<XCommon>.singleton.XHash(xresPackage.bundle);
 +					bool flag3 = !this._bundles.TryGetValue(key, out assetBundle);
 +					if (flag3)
 +					{
 +						byte[] array = null;
 +						bool flag4 = !this._persist_image.TryGetValue(key, out array);
 +						if (flag4)
 +						{
 +							XBundleData data = null;
 +							bool flag5 = this._assets.TryGetValue(key, out data);
 +							if (!flag5)
 +							{
 +								return null;
 +							}
 +							array = XSingleton<XCaching>.singleton.LoadFile(XSingleton<XCaching>.singleton.GetLocalPath(data));
 +						}
 +						assetBundle = AssetBundle.LoadFromMemory(array);
 +						this._bundles.Add(key, assetBundle);
 +					}
 +					string text = xresPackage.location.Substring(xresPackage.location.LastIndexOf('/') + 1);
 +					result = assetBundle.LoadAsset(text, XUpdater.Ass.GetType(xresPackage.type));
 +				}
 +			}
 +			return result;
 +		}
 +
 +		private AsyncVersionProcessRequest OnVersionDownloaded(TextAsset text)
 +		{
 +			AsyncVersionProcessRequest avpr = new AsyncVersionProcessRequest();
 +			XSingleton<XLoadingUI>.singleton.SetStatus(XSingleton<XStringTable>.singleton.GetString("XUPDATE_INFO_FETCHMANIFEST"), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +			bool flag = text != null;
 +			if (flag)
 +			{
 +				byte[] contents = text.bytes;
 +				//!
 +				new Thread((ThreadStart)delegate
 +				{
 +					avpr.IsCorrect = this.LoadVersion(contents);
 +					avpr.IsDone = true;
 +				}).Start();
 +			}
 +			else
 +			{
 +				avpr.IsDone = true;
 +				avpr.IsCorrect = false;
 +			}
 +			return avpr;
 +		}
 +
 +		private void OnVersionLoaded(bool correct)
 +		{
 +			if (correct)
 +			{
 +				this._phase = eUPdatePhase.xUP_CompareVersion;
 +			}
 +			else
 +			{
 +				this._log.Remove(0, this._log.Length);
 +				this._log.Append(XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_MANIFESTERROR"));
 +				XSingleton<XLoadingUI>.singleton.SetStatus(this._log.ToString(), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +				XSingleton<XUpdater>.singleton.OnError();
 +			}
 +		}
 +
 +		private void OnBundleFetched(WWW www, byte[] bytes, XBundleData data, bool newdownload)
 +		{
 +			if (newdownload)
 +			{
 +				XSingleton<XDebug>.singleton.AddLog("Finished Download ", data.Name, null, null, null, null, XDebugColor.XDebug_None);
 +				this._log.Remove(0, this._log.Length);
 +				this._log.AppendFormat(XSingleton<XStringTable>.singleton.GetString("XUPDATE_INFO_DOWNLOAD_FILE_COMPLETE"), data.Name);
 +				XSingleton<XLoadingUI>.singleton.SetStatus(this._log.ToString(), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +			}
 +			else
 +			{
 +				XSingleton<XDebug>.singleton.AddLog("Finished Extract ", data.Name, null, null, null, null, XDebugColor.XDebug_None);
 +				this._log.Remove(0, this._log.Length);
 +				this._log.AppendFormat(XSingleton<XStringTable>.singleton.GetString("XUPDATE_INFO_EXTRACTING_COMPLETE"), data.Name);
 +				XSingleton<XLoadingUI>.singleton.SetStatus(this._log.ToString(), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +			}
 +			uint key = XSingleton<XCommon>.singleton.XHash(data.Name);
 +			bool load = false;
 +			this._bundle_data = data;
 +			switch (this._bundle_data.Level)
 +			{
 +			case AssetLevel.Memory:
 +				load = true;
 +				break;
 +			case AssetLevel.Image:
 +			{
 +				byte[] array = new byte[bytes.Length];
 +				bytes.CopyTo(array, 0);
 +				this._persist_image.Add(key, array);
 +				break;
 +			}
 +			}
 +			this._assets.Add(key, this._bundle_data);
 +			this._bundle_getter.GetBundle(www, bytes, new HandleLoadBundle(this.OnBundleLoaded), load);
 +		}
 +
 +		private void OnBundleLoaded(AssetBundle bundle)
 +		{
 +			bool flag = bundle != null;
 +			if (flag)
 +			{
 +				this._bundles.Add(XSingleton<XCommon>.singleton.XHash(this._bundle_data.Name), bundle);
 +			}
 +			this._bundle_fetching = false;
 +		}
 +
 +		private void OnAssetLoaded(XResPackage package, UnityEngine.Object asset)
 +		{
 +			uint key = XSingleton<XCommon>.singleton.XHash(package.location);
 +			bool flag = asset != null;
 +			if (flag)
 +			{
 +				bool flag2 = !this._persist_assets.ContainsKey(key);
 +				if (flag2)
 +				{
 +					this._persist_assets.Add(key, asset);
 +				}
 +				else
 +				{
 +					this._persist_assets[key] = asset;
 +				}
 +			}
 +			this._asset_loading = false;
 +		}
 +
 +		private void UpdateLocalVersion(Stream s)
 +		{
 +			this._buildin = this.FetchBuildIn(s);
 +			this._client = this.FetchBuildOut();
 +			bool flag = this._buildin != null;
 +			if (flag)
 +			{
 +				XSingleton<XDebug>.singleton.AddLog("BuildIn version: ", this._buildin.ToString(), null, null, null, null, XDebugColor.XDebug_None);
 +			}
 +			bool flag2 = this._client != null;
 +			if (flag2)
 +			{
 +				XSingleton<XDebug>.singleton.AddLog("BuildOut version: ", this._client.ToString(), null, null, null, null, XDebugColor.XDebug_None);
 +			}
 +			this._need_play_cg = (this._client == null);
 +			bool flag3 = this._client == null;
 +			if (flag3)
 +			{
 +				this._client = new XVersionData(this._buildin);
 +				bool flag4 = !XSingleton<XCaching>.singleton.CleanCache();
 +				if (flag4)
 +				{
 +					this._log.Remove(0, this._log.Length);
 +					this._log.Append(XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_DELETEDENIED"));
 +					XSingleton<XLoadingUI>.singleton.SetStatus(this._log.ToString(), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +					XSingleton<XUpdater>.singleton.OnError();
 +				}
 +			}
 +			else
 +			{
 +				int num = this._client.CompareTo(this._buildin);
 +				bool flag5 = num < 0 || this._buildin.Build_Version != this._client.Build_Version;
 +				if (flag5)
 +				{
 +					this._need_play_cg = true;
 +					this._client.VersionCopy(this._buildin);
 +					bool flag6 = !XSingleton<XCaching>.singleton.CleanCache();
 +					if (flag6)
 +					{
 +						this._log.Remove(0, this._log.Length);
 +						this._log.Append(XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_DELETEDENIED"));
 +						XSingleton<XLoadingUI>.singleton.SetStatus(this._log.ToString(), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +						XSingleton<XUpdater>.singleton.OnError();
 +					}
 +				}
 +			}
 +			XSingleton<XDebug>.singleton.AddLog("Client version: ", this._client.ToString(), null, null, null, null, XDebugColor.XDebug_None);
 +		}
 +
 +		private XVersionData FetchBuildIn(Stream s)
 +		{
 +			bool flag = s == null;
 +			XVersionData result;
 +			if (flag)
 +			{
 +				result = null;
 +			}
 +			else
 +			{
 +				StreamReader streamReader = new StreamReader(s);
 +				string version = streamReader.ReadToEnd();
 +				result = XVersionData.Convert2Version(version);
 +			}
 +			return result;
 +		}
 +
 +		private XVersionData FetchBuildOut()
 +		{
 +			string localVersion = XVersion.GetLocalVersion();
 +			XSingleton<XDebug>.singleton.AddLog("Local Version Path " + localVersion, null, null, null, null, null, XDebugColor.XDebug_None);
 +			XVersionData result = null;
 +			bool flag = File.Exists(localVersion);
 +			if (flag)
 +			{
 +				byte[] buffer = this.XCryptography(File.ReadAllBytes(localVersion));
 +				using (MemoryStream memoryStream = new MemoryStream(buffer))
 +				{
 +					XmlSerializer xmlSerializer = new XmlSerializer(typeof(XVersionData));
 +					try
 +					{
 +						result = (xmlSerializer.Deserialize(memoryStream) as XVersionData);
 +					}
 +					catch (Exception ex)
 +					{
 +						result = null;
 +						XSingleton<XDebug>.singleton.AddLog("Build Out Version Fetching FAILED! " + ex.Message, null, null, null, null, null, XDebugColor.XDebug_None);
 +					}
 +					finally
 +					{
 +						memoryStream.Close();
 +					}
 +				}
 +			}
 +			else
 +			{
 +				XSingleton<XDebug>.singleton.AddLog("Local Version Path " + localVersion + " not exists.", null, null, null, null, null, XDebugColor.XDebug_None);
 +			}
 +			return result;
 +		}
 +
 +		private bool LoadVersion(byte[] text)
 +		{
 +			string a = BitConverter.ToString(text, 0, XUpdater.Md5Length);
 +			string b = XSingleton<XCaching>.singleton.CalculateMD5(text, XUpdater.Md5Length, text.Length - XUpdater.Md5Length);
 +			bool flag = a == b;
 +			if (flag)
 +			{
 +				using (MemoryStream memoryStream = new MemoryStream(text, XUpdater.Md5Length, text.Length - XUpdater.Md5Length))
 +				{
 +					XmlSerializer xmlSerializer = new XmlSerializer(typeof(XVersionData));
 +					this._server = (xmlSerializer.Deserialize(memoryStream) as XVersionData);
 +					bool flag2 = this._server != null && this._server.Target_Platform == this._runtime_platform;
 +					if (flag2)
 +					{
 +						XSingleton<XDebug>.singleton.AddLog("Server version: ", this._server.ToString(), null, null, null, null, XDebugColor.XDebug_None);
 +						return true;
 +					}
 +				}
 +			}
 +			XSingleton<XDebug>.singleton.AddLog("Analysis Server version error!", null, null, null, null, null, XDebugColor.XDebug_None);
 +			this._server = null;
 +			return false;
 +		}
 +
 +		private bool CheckMemory()
 +		{
 +			return true;
 +		}
 +
 +		private bool Preparing()
 +		{
 +			Stream stream = null;
 +			XSingleton<XDebug>.singleton.AddLog("Fetch local version...", null, null, null, null, null, XDebugColor.XDebug_None);
 +			bool flag = (int)Application.platform == 8;
 +			if (flag)
 +			{
 +				stream = XSingleton<XResourceLoaderMgr>.singleton.ReadText("ios-version", ".bytes", false);
 +			}
 +			else
 +			{
 +				bool flag2 = (int)Application.platform == 11;
 +				if (flag2)
 +				{
 +					stream = XSingleton<XResourceLoaderMgr>.singleton.ReadText("android-version", ".bytes", false);
 +				}
 +			}
 +			bool flag3 = stream != null;
 +			bool result;
 +			if (flag3)
 +			{
 +				this.UpdateLocalVersion(stream);
 +				XSingleton<XResourceLoaderMgr>.singleton.ClearStream(stream);
 +				result = true;
 +			}
 +			else
 +			{
 +				result = (XUpdater.LaunchMode == XLaunchMode.Dev);
 +			}
 +			return result;
 +		}
 +
 +		private IEnumerator VersionComparer()
 +		{
 +			int compare = this._client.CompareTo(this._server);
 +			this._update_pakcage_size = 0UL;
 +			bool flag = compare > 0;
 +			if (flag)
 +			{
 +				this._server = this._client;
 +				this._download_prepare = null;
 +				this.DownLoadConfirmed(false);
 +			}
 +			else
 +			{
 +				bool flag2 = compare == 0 || (compare < 0 && this._client.CanUpdated(this._server));
 +				if (flag2)
 +				{
 +					bool flag3 = this._download_prepare == null;
 +					if (flag3)
 +					{
 +						this._download_prepare = this.DownLoadPrepare();
 +					}
 +					while (this._download_prepare.MoveNext())
 +					{
 +						yield return null;
 +					}
 +					this._download_prepare = null;
 +					this.DownLoadConfirmed(compare != 0);
 +				}
 +				else
 +				{
 +					XSingleton<XLoadingUI>.singleton.SetStatus(XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_VERSIONNOTMATCH"), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +					this.ShowVersionInfo(this._client, false);
 +					Texture tex = null;
 +					bool flag4 = !this._is_download_update_pic;
 +					if (flag4)
 +					{
 +						WWW www = new WWW("https://image.lzgjx.qq.com/sharingicon/updateimg.jpg");
 +						while (!www.isDone)
 +						{
 +							yield return null;
 +						}
 +						bool flag5 = string.IsNullOrEmpty(www.error);
 +						if (flag5)
 +						{
 +							tex = www.texture;
 +						}
 +						www.Dispose();
 +						this._is_download_update_pic = true;
 +						www = null;
 +					}
 +					this._phase = eUPdatePhase.xUP_Error;
 +					XSingleton<XLoadingUI>.singleton.SetDownLoad(new XLoadingUI.OnSureCallBack(this.ToAppStore), tex);
 +					tex = null;
 +				}
 +			}
 +			yield break;
 +		}
 +
 +		private void ToAppStore()
 +		{
 +			RuntimePlatform platform = Application.platform;
 +			if ((int)platform != 8)
 +			{
 +				if ((int)platform == 11)
 +				{
 +					for (int i = 0; i < this._client.Res.Count; i++)
 +					{
 +						bool flag = this._client.Res[i].location == "Table/StringTable";
 +						if (flag)
 +						{
 +							XBundleData specificBundle = this._client.GetSpecificBundle(this._client.Res[i].bundle);
 +							string localPath = XSingleton<XCaching>.singleton.GetLocalPath(specificBundle);
 +							try
 +							{
 +								byte[] array = File.ReadAllBytes(localPath);
 +								bool flag2 = array != null;
 +								if (flag2)
 +								{
 +									AssetBundle assetBundle = AssetBundle.LoadFromMemory(array);
 +									bool flag3 = assetBundle != null;
 +									if (flag3)
 +									{
 +										TextAsset textAsset = assetBundle.LoadAsset("StringTable", typeof(TextAsset)) as TextAsset;
 +										bool flag4 = textAsset != null;
 +										if (flag4)
 +										{
 +											bool flag5 = !XSingleton<XStringTable>.singleton.ReInit(textAsset);
 +											if (flag5)
 +											{
 +												XSingleton<XStringTable>.singleton.SyncInit();
 +											}
 +										}
 +									}
 +								}
 +							}
 +							catch (Exception ex)
 +							{
 +								XSingleton<XDebug>.singleton.AddErrorLog("ToAndroidAppStore: ", ex.Message, null, null, null, null);
 +							}
 +							break;
 +						}
 +					}
 +					string @string = XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_VERSIONNOTMATCH_ANDROID_URL");
 +					XSingleton<XDebug>.singleton.AddLog("AndroidAppStore Url: ", @string, null, null, null, null, XDebugColor.XDebug_None);
 +					Application.OpenURL(@string);
 +				}
 +			}
 +			else
 +			{
 +				for (int j = 0; j < this._client.Res.Count; j++)
 +				{
 +					bool flag6 = this._client.Res[j].location == "Table/StringTable";
 +					if (flag6)
 +					{
 +						XBundleData specificBundle2 = this._client.GetSpecificBundle(this._client.Res[j].bundle);
 +						string localPath2 = XSingleton<XCaching>.singleton.GetLocalPath(specificBundle2);
 +						try
 +						{
 +							byte[] array2 = File.ReadAllBytes(localPath2);
 +							bool flag7 = array2 != null;
 +							if (flag7)
 +							{
 +								AssetBundle assetBundle2 = AssetBundle.LoadFromMemory(array2);
 +								bool flag8 = assetBundle2 != null;
 +								if (flag8)
 +								{
 +									TextAsset textAsset2 = assetBundle2.LoadAsset("StringTable", typeof(TextAsset)) as TextAsset;
 +									bool flag9 = textAsset2 != null;
 +									if (flag9)
 +									{
 +										bool flag10 = !XSingleton<XStringTable>.singleton.ReInit(textAsset2);
 +										if (flag10)
 +										{
 +											XSingleton<XStringTable>.singleton.SyncInit();
 +										}
 +									}
 +								}
 +							}
 +						}
 +						catch (Exception ex2)
 +						{
 +							XSingleton<XDebug>.singleton.AddErrorLog("ToAppStore: ", ex2.Message, null, null, null, null);
 +						}
 +						break;
 +					}
 +				}
 +				string string2 = XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_VERSIONNOTMATCH_URL");
 +				XSingleton<XDebug>.singleton.AddLog("AppStore Url: ", string2, null, null, null, null, XDebugColor.XDebug_None);
 +				Application.OpenURL(string2);
 +			}
 +		}
 +
 +		private void DownLoadConfirmedCallBack()
 +		{
 +			this._phase = eUPdatePhase.xUP_DownLoadBundle;
 +		}
 +
 +		private void DownLoadCancelledCallBack()
 +		{
 +			this._phase = eUPdatePhase.xUP_Error;
 +			XSingleton<XLoadingUI>.singleton.SetStatus("", byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +			this.ShowVersionInfo(this._client, false);
 +		}
 +
 +		private void DownLoadConfirmed(bool updated)
 +		{
 +			if (updated)
 +			{
 +				bool flag = this._update_pakcage_size < 1048576UL;
 +				if (flag)
 +				{
 +					this.DownLoadConfirmedCallBack();
 +				}
 +				else
 +				{
 +					XSingleton<XLoadingUI>.singleton.SetDialog(this._update_pakcage_size, new XLoadingUI.OnSureCallBack(this.DownLoadConfirmedCallBack), new XLoadingUI.OnSureCallBack(this.DownLoadCancelledCallBack));
 +					this._phase = eUPdatePhase.xUP_DownLoadConfirm;
 +				}
 +			}
 +			else
 +			{
 +				this._phase = eUPdatePhase.xUP_DownLoadBundle;
 +			}
 +		}
 +
 +		private IEnumerator DownLoadPrepare()
 +		{
 +			int num;
 +			for (int i = 0; i < this._server.Res.Count; i = num + 1)
 +			{
 +				bool flag = !this._buildin.NeedDownload(this._server.Res[i].bundle);
 +				if (!flag)
 +				{
 +					XBundleData bundle = this._server.GetSpecificBundle(this._server.Res[i].bundle);
 +					bool flag2 = bundle == null;
 +					if (flag2)
 +					{
 +						XSingleton<XDebug>.singleton.AddLog("Bundle ", this._server.Res[i].bundle, " is missing in sever bundle set.", null, null, null, XDebugColor.XDebug_None);
 +					}
 +					else
 +					{
 +						bool flag3 = this._cacheload_bundle.Contains(bundle);
 +						if (!flag3)
 +						{
 +							bool flag4 = this._download_bundle.Contains(bundle);
 +							if (!flag4)
 +							{
 +								AsyncCachedRequest acr = XSingleton<XCaching>.singleton.IsBundleCached(bundle, this._server.MD5_Size);
 +								while (!acr.IsDone)
 +								{
 +									yield return null;
 +								}
 +								bool flag5 = !acr.Cached && acr.MaybeCached;
 +								if (flag5)
 +								{
 +									XBundleData clientData = null;
 +									foreach (XBundleData data in this._client.Bundles)
 +									{
 +										bool flag6 = data.Name == bundle.Name;
 +										if (flag6)
 +										{
 +											clientData = data;
 +											break;
 +										}
 +										//data = null;
 +									}
 +									List<XBundleData>.Enumerator enumerator = default(List<XBundleData>.Enumerator);
 +									acr.Cached = (clientData != null && clientData.MD5 == bundle.MD5);
 +									clientData = null;
 +								}
 +								XSingleton<XDebug>.singleton.AddLog("Bundle ", bundle.Name, " cached is ", acr.Cached.ToString(), null, null, XDebugColor.XDebug_None);
 +								bool cached = acr.Cached;
 +								if (cached)
 +								{
 +									this._cacheload_bundle.Add(bundle);
 +								}
 +								else
 +								{
 +									this._download_bundle.Add(bundle);
 +									this._update_pakcage_size += (ulong)bundle.Size;
 +								}
 +								bundle = null;
 +								acr = null;
 +							}
 +						}
 +					}
 +				}
 +				num = i;
 +			}
 +			this.MetaPrepare(this._server.AB);
 +			this.MetaPrepare(this._server.Scene);
 +			this.MetaPrepare(this._server.FMOD);
 +			yield break;
 +		}
 +
 +		private void MetaPrepare(List<XMetaResPackage> meta)
 +		{
 +			bool flag = this._platform != null && !this._platform.IsPublish();
 +			for (int i = 0; i < meta.Count; i++)
 +			{
 +				bool flag2 = !this._buildin.NeedDownload(meta[i].bundle) || !this._client.NeedDownload(meta[i].bundle);
 +				if (!flag2)
 +				{
 +					bool flag3 = !this._meta_bundle.Contains(meta[i]);
 +					if (flag3)
 +					{
 +						this._meta_bundle.Add(meta[i]);
 +					}
 +					bool flag4 = flag;
 +					if (flag4)
 +					{
 +						XSingleton<XDebug>.singleton.AddLog("Meta ", meta[i].download, " is prepared to downloading...", null, null, null, XDebugColor.XDebug_None);
 +					}
 +					this._update_pakcage_size += (ulong)meta[i].Size;
 +				}
 +			}
 +		}
 +
 +		private IEnumerator DownLoadBundles()
 +		{
 +			bool log = this._platform != null && !this._platform.IsPublish();
 +			int total = this._download_bundle.Count + this._cacheload_bundle.Count + this._meta_bundle.Count;
 +			int processed = 0;
 +			int num;
 +			for (int i = 0; i < this._download_bundle.Count; i = num + 1)
 +			{
 +				while (this._bundle_fetching)
 +				{
 +					yield return null;
 +				}
 +				bool flag = log;
 +				if (flag)
 +				{
 +					XSingleton<XDebug>.singleton.AddLog("Updating ", this._download_bundle[i].Name, " ... ", processed.ToString(), "/", total.ToString(), XDebugColor.XDebug_None);
 +				}
 +				this._bundle_fetching = true;
 +				num = processed + 1;
 +				processed = num;
 +				XSingleton<XCaching>.singleton.Download(this._download_bundle[i], new HandleFetchBundle(this.OnBundleFetched), (float)processed / (float)total);
 +				num = i;
 +			}
 +			for (int j = 0; j < this._cacheload_bundle.Count; j = num + 1)
 +			{
 +				while (this._bundle_fetching)
 +				{
 +					yield return null;
 +				}
 +				bool flag2 = log;
 +				if (flag2)
 +				{
 +					XSingleton<XDebug>.singleton.AddLog("Extracting ", this._cacheload_bundle[j].Name, " ... ", processed.ToString(), "/", total.ToString(), XDebugColor.XDebug_None);
 +				}
 +				this._bundle_fetching = true;
 +				num = processed + 1;
 +				processed = num;
 +				bool flag3 = (int)Application.platform == 8;
 +				if (flag3)
 +				{
 +					while (!XSingleton<XCaching>.singleton.Extract(this._cacheload_bundle[j], new HandleFetchBundle(this.OnBundleFetched), (float)processed / (float)total))
 +					{
 +						yield return null;
 +					}
 +				}
 +				else
 +				{
 +					XSingleton<XCaching>.singleton.Extract(this._cacheload_bundle[j], new HandleFetchBundle(this.OnBundleFetched), (float)processed / (float)total);
 +				}
 +				num = j;
 +			}
 +			while (this._bundle_fetching)
 +			{
 +				yield return null;
 +			}
 +			for (int k = 0; k < this._meta_bundle.Count; k = num + 1)
 +			{
 +				num = processed + 1;
 +				processed = num;
 +				AsyncWriteRequest awr = XSingleton<XCaching>.singleton.Download(this._meta_bundle[k].download, this._meta_bundle[k].Size, (float)processed / (float)total);
 +				bool flag4 = log;
 +				if (flag4)
 +				{
 +					XSingleton<XDebug>.singleton.AddLog("Download meta ", this._meta_bundle[k].download, " ... ", processed.ToString(), "/", total.ToString(), XDebugColor.XDebug_None);
 +				}
 +				while (!awr.IsDone)
 +				{
 +					bool hasError = awr.HasError;
 +					if (hasError)
 +					{
 +						bool on_file_download_retry = this._on_file_download_retry;
 +						if (on_file_download_retry)
 +						{
 +							this._on_file_download_retry = false;
 +							this._on_file_download_need_retry = false;
 +							num = k;
 +							k = num - 1;
 +							num = processed;
 +							processed = num - 1;
 +							this._log.Length = 0;
 +							this._log.Append(XSingleton<XStringTable>.singleton.GetString("XUPDATE_INFO_RETRY"));
 +							XSingleton<XLoadingUI>.singleton.SetStatus(this._log.ToString(), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +							yield return null;
 +							break;
 +						}
 +						this._on_file_download_need_retry = true;
 +						this._log.Length = 0;
 +						this._log.AppendFormat(XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_DOWNLOADRESFAILED_AND_RETRY"), awr.Name);
 +						XSingleton<XLoadingUI>.singleton.SetStatus(this._log.ToString(), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +						yield return null;
 +					}
 +					else
 +					{
 +						yield return null;
 +					}
 +				}
 +				awr = null;
 +				num = k;
 +			}
 +			for (int l = 0; l < this._server.Res.Count; l = num + 1)
 +			{
 +				bool flag5 = this.ProcessAssets(this._server.Res[l]);
 +				if (flag5)
 +				{
 +					bool flag6 = this._server.Res[l].rtype != ResourceType.Script;
 +					if (flag6)
 +					{
 +						uint hash = XSingleton<XCommon>.singleton.XHash(this._server.Res[l].location);
 +						this._res_list.Add(hash, this._server.Res[l]);
 +					}
 +					this._log.Remove(0, this._log.Length);
 +					this._log.AppendFormat(XSingleton<XStringTable>.singleton.GetString("XUPDATE_INFO_PRELOADING"), ((float)l / (float)this._server.Res.Count * 100f).ToString("F0"));
 +					XSingleton<XLoadingUI>.singleton.SetStatus(this._log.ToString(), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +					bool flag7 = l << 30 == 0;
 +					if (flag7)
 +					{
 +						yield return null;
 +					}
 +				}
 +				num = l;
 +			}
 +			AsyncLogRequest alr = this.LogNewVersion();
 +			while (!alr.IsDone)
 +			{
 +				Thread.Sleep(1);
 +			}
 +			this.XPlatform.SetNoBackupFlag(XVersion.GetLocalVersion());
 +			yield break;
 +		}
 +
 +		private AsyncLogRequest LogNewVersion()
 +		{
 +			AsyncLogRequest alr = new AsyncLogRequest();
 +			bool flag = this._server != this._client;
 +			if (flag)
 +			{
 +				new Thread((ThreadStart)delegate
 +				{
 +					using (MemoryStream memoryStream = new MemoryStream())
 +					{
 +						XmlSerializer xmlSerializer = new XmlSerializer(typeof(XVersionData));
 +						XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces();
 +						xmlSerializerNamespaces.Add(string.Empty, string.Empty);
 +						xmlSerializer.Serialize(memoryStream, this._server, xmlSerializerNamespaces);
 +						File.WriteAllBytes(XVersion.GetLocalVersion(), this.XCryptography(memoryStream.ToArray()));
 +					}
 +					alr.IsDone = true;
 +				}).Start();
 +			}
 +			else
 +			{
 +				alr.IsDone = true;
 +			}
 +			return alr;
 +		}
 +
 +		private void ShowVersionInfo(XVersionData data, bool launch = true)
 +		{
 +			bool flag = data != null;
 +			if (flag)
 +			{
 +				this._log.Remove(0, this._log.Length);
 +				this._log.Append("v").Append(data.ToString());
 +				XSingleton<XLoadingUI>.singleton.SetVersion(this._log.ToString());
 +			}
 +			else
 +			{
 +				XSingleton<XLoadingUI>.singleton.SetVersion("Dev 0.0.0");
 +			}
 +			if (launch)
 +			{
 +				this._phase = eUPdatePhase.xUP_LaunchGame;
 +			}
 +		}
 +
 +		private bool ProcessAssets(XResPackage res)
 +		{
 +			AssetBundle assetBundle = null;
 +			bool flag = this._bundles.TryGetValue(XSingleton<XCommon>.singleton.XHash(res.bundle), out assetBundle);
 +			bool result;
 +			if (flag)
 +			{
 +				string text = res.location.Substring(res.location.LastIndexOf('/') + 1);
 +				ResourceType rtype = res.rtype;
 +				if (rtype != ResourceType.Assets)
 +				{
 +					if (rtype == ResourceType.Script)
 +					{
 +						TextAsset textAsset = assetBundle.LoadAsset(text, XUpdater.Ass.GetType(res.type)) as TextAsset;
 +						this._script = textAsset.bytes;
 +						assetBundle.Unload(false);
 +						this._bundles.Remove(XSingleton<XCommon>.singleton.XHash(res.bundle));
 +					}
 +				}
 +				else
 +				{
 +					this.OnAssetLoaded(res, assetBundle.LoadAsset(text, XUpdater.Ass.GetType(res.type)));
 +				}
 +				result = true;
 +			}
 +			else
 +			{
 +				result = false;
 +			}
 +			return result;
 +		}
 +
 +		private IEnumerator AsyncProcessAssets(XResPackage package, AssetBundle bundle)
 +		{
 +			string name = package.location.Substring(package.location.LastIndexOf('/') + 1);
 +			this._asset_loading = true;
 +			this._bundle_getter.GetAsset(bundle, package, new HandleLoadAsset(this.OnAssetLoaded));
 +			while (this._asset_loading)
 +			{
 +				yield return null;
 +			}
 +			yield break;
 +		}
 +
 +		private IEnumerator LaunchGame()
 +		{
 +			XSingleton<XLoadingUI>.singleton.SetStatus(XSingleton<XStringTable>.singleton.GetString("XUPDATE_INFO_LOADING"), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +			yield return null;
 +			this.ABManager.Init();
 +			this.XPlatform.ReloadFMOD();
 +			AsyncAssemblyRequest aar = new AsyncAssemblyRequest();
 +			ResourceRequest rrq = null;
 +			bool flag = (int) Application.platform == 11;
 +			if (flag)
 +			{
 +				string path = Application.persistentDataPath + "/XMainClient.bytes";
 +				bool flag2 = File.Exists(path);
 +				if (flag2)
 +				{
 +					this._script = File.ReadAllBytes(path);
 +				}
 +				bool flag3 = this._script == null && (int)Application.platform == 11;
 +				if (flag3)
 +				{
 +					rrq = Resources.LoadAsync("XMainClient", typeof(TextAsset));
 +					yield return rrq;
 +					this._script = (rrq.asset as TextAsset).bytes;
 +				}
 +				path = null;
 +			}
 +			RuntimePlatform platform = Application.platform;
 +			if ((int)platform != 8)
 +			{
 +				if ((int)platform != 11)
 +				{
 +				}
 +				//!
 +			//	aar.Main = ((this._script == null) ? Assembly.Load("XMainClient") : Assembly.Load(this._script));
 +			}
 +			else
 +			{
 +//				aar.Main = Assembly.Load("XMainClient");
 +			}
 +			//		XSingleton<XShell>.singleton.MakeEntrance(aar.Main);
 +			XSingleton<XShell>.singleton._MakeEntrance();
 +
 +			bool flag4 = rrq != null && rrq.asset != null;
 +			if (flag4)
 +			{
 +				Resources.UnloadAsset(rrq.asset);
 +			}
 +			this._script = null;
 +			this._log.Remove(0, this._log.Length);
 +			this._log.Append(XSingleton<XStringTable>.singleton.GetString("XUPDATE_INFO_LAUNCHING"));
 +			XSingleton<XLoadingUI>.singleton.SetStatus(this._log.ToString(), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +			yield return null;
 +			XSingleton<XShell>.singleton.PreLaunch();
 +			while (!XSingleton<XShell>.singleton.Launched())
 +			{
 +				yield return null;
 +				XSingleton<XShell>.singleton.Launch();
 +			}
 +			this.XLuaEngine.InitLua();
 +			yield break;
 +		}
 +
 +		private byte[] XCryptography(byte[] bs)
 +		{
 +			for (int i = 0; i < bs.Length; i++)
 +			{
 +				bs[i] ^= 154;
 +			}
 +			return bs;
 +		}
 +
 +		private string PatchPrefix()
 +		{
 +			XLaunchMode launchMode = XUpdater.LaunchMode;
 +			string result;
 +			if (launchMode != XLaunchMode.Live)
 +			{
 +				if (launchMode != XLaunchMode.PreProduct)
 +				{
 +					if (launchMode != XLaunchMode.Dev)
 +					{
 +						result = "Patch/Live/";
 +					}
 +					else
 +					{
 +						result = "Patch/Dev/";
 +					}
 +				}
 +				else
 +				{
 +					result = "Patch/PreProduct/";
 +				}
 +			}
 +			else
 +			{
 +				result = "Patch/Live/";
 +			}
 +			return result;
 +		}
 +
 +		private void GetLaunchMode()
 +		{
 +			XUpdater._launch_mode = XLaunchMode.Dev;
 +		}
 +
 +		public void PlayCG(object o = null)
 +		{
 +			this._video.Play(false);
 +		}
 +
 +		public void SetServerVersion(string data)
 +		{
 +			string b = "";
 +			bool flag = this._buildin != null;
 +			if (flag)
 +			{
 +				b = this._buildin.Build_Version.ToString();
 +			}
 +			string[] array = data.Split(new char[]
 +			{
 +				'|'
 +			});
 +			RuntimePlatform platform = Application.platform;
 +			if ((int)platform != 8)
 +			{
 +				if ((int)platform == 11)
 +				{
 +					this._target_version = array[1];
 +					try
 +					{
 +						bool flag2 = array.Length > 4;
 +						if (flag2)
 +						{
 +							string[] array2 = array[4].Split(new char[]
 +							{
 +								':'
 +							});
 +							for (int i = 0; i < array2.Length; i++)
 +							{
 +								string[] array3 = array2[i].Split(new char[]
 +								{
 +									'.'
 +								});
 +								bool flag3 = array3.Length > 1 && array3[1] == b;
 +								if (flag3)
 +								{
 +									this._target_version = array2[i];
 +								}
 +							}
 +						}
 +					}
 +					catch (Exception ex)
 +					{
 +						XSingleton<XDebug>.singleton.AddErrorLog("GetServer ExData Error!!!   " + ex.Message, null, null, null, null, null);
 +					}
 +				}
 +			}
 +			else
 +			{
 +				this._target_version = array[0];
 +				try
 +				{
 +					bool flag4 = array.Length > 3;
 +					if (flag4)
 +					{
 +						string[] array4 = array[3].Split(new char[]
 +						{
 +							':'
 +						});
 +						for (int j = 0; j < array4.Length; j++)
 +						{
 +							string[] array5 = array4[j].Split(new char[]
 +							{
 +								'.'
 +							});
 +							bool flag5 = array5.Length > 1 && array5[1] == b;
 +							if (flag5)
 +							{
 +								this._target_version = array4[j];
 +							}
 +						}
 +					}
 +				}
 +				catch (Exception ex2)
 +				{
 +					XSingleton<XDebug>.singleton.AddErrorLog("GetServer ExData Error!!!   " + ex2.Message, null, null, null, null, null);
 +				}
 +			}
 +			try
 +			{
 +				bool flag6 = array.Length > 2;
 +				if (flag6)
 +				{
 +					this._need_check_file = (array[2] == "1");
 +				}
 +			}
 +			catch (Exception ex3)
 +			{
 +				XSingleton<XDebug>.singleton.AddErrorLog("GetServer CheckFile Flag Error!!!   " + ex3.Message, null, null, null, null, null);
 +			}
 +			XSingleton<XDebug>.singleton.AddGreenLog(data, null, null, null, null, null);
 +			this._fetch_version_network.Close();
 +			this._phase = eUPdatePhase.xUP_LoadVersion;
 +		}
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XUpdater.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XUpdater.cs.meta new file mode 100644 index 00000000..5c15329c --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XUpdater.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f2420f6e29a73574bb6c20d4c46e16fa +timeCreated: 1611465807 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XVersion.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XVersion.cs new file mode 100644 index 00000000..6c9759de --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XVersion.cs @@ -0,0 +1,174 @@ +using System;
 +using System.Collections;
 +using System.IO;
 +using System.Threading;
 +using UnityEngine;
 +using XUtliPoolLib;
 +
 +namespace XUpdater
 +{
 +	internal sealed class XVersion : MonoBehaviour
 +	{
 +		public static string VERSION_FILE
 +		{
 +			get
 +			{
 +				return string.Format("manifest.{0}.assetbundle", XSingleton<XUpdater>.singleton.TargetVersion.ToString());
 +			}
 +		}
 +
 +		public static readonly string LOCAL_VERSION_FILE = "manifest.asset";
 +
 +		private WWW _server_Version = null;
 +
 +		private uint _time_out_token = 0u;
 +
 +		private delegate void HandleFinishDownload(WWW www, string error);
 +
 +		public static string GetLocalVersion()
 +		{
 +			return XSingleton<XCaching>.singleton.UpdatePath + XVersion.LOCAL_VERSION_FILE;
 +		}
 +
 +		public void ServerDownload(HandleVersionDownload callback1, HandleVersionLoaded callback2)
 +		{
 +			base.StopAllCoroutines();
 +			string text = XSingleton<XCaching>.singleton.HostUrl + XSingleton<XUpdater>.singleton.Platform;
 +			XSingleton<XLoadingUI>.singleton.SetStatus(XSingleton<XStringTable>.singleton.GetString("XUPDATE_INFO_CONNECTING"), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +			XSingleton<XDebug>.singleton.AddLog("connecting to update server: ", text, null, null, null, null, XDebugColor.XDebug_None);
 +			this._time_out_token = XSingleton<XTimerMgr>.singleton.SetTimer(5f, new XTimerMgr.ElapsedEventHandler(this.OnTimeOut), null);
 +			base.StartCoroutine(this.DownloadVersion(XSingleton<XCaching>.singleton.MakeToken(text + XVersion.VERSION_FILE), callback1, callback2));
 +		}
 +
 +		private IEnumerator DownloadVersion(string url, HandleVersionDownload callback1, HandleVersionLoaded callback2)
 +		{
 +			this._server_Version = new WWW(url);
 +			yield return this._server_Version;
 +			XSingleton<XLoadingUI>.singleton.SetStatus(XSingleton<XStringTable>.singleton.GetString("XUPDATE_INFO_CHECKUPDATING"), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +			XSingleton<XTimerMgr>.singleton.KillTimer(this._time_out_token);
 +			bool flag = this._server_Version != null;
 +			if (flag)
 +			{
 +				bool flag2 = string.IsNullOrEmpty(this._server_Version.error);
 +				if (flag2)
 +				{
 +					bool flag3 = callback1 != null;
 +					if (flag3)
 +					{
 +						AssetBundle ab = this._server_Version.assetBundle;
 +						bool flag4 = ab == null;
 +						if (flag4)
 +						{
 +							XSingleton<XDebug>.singleton.AddErrorLog("load server manifest bundle error.", null, null, null, null, null);
 +							XSingleton<XLoadingUI>.singleton.SetStatus(XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_FETCHMANIFESTERROR"), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +							XSingleton<XUpdater>.singleton.OnError();
 +						}
 +						else
 +						{
 +							UnityEngine.Object asset = ab.LoadAsset("manifest", typeof(TextAsset));
 +							bool flag5 = asset == null;
 +							if (flag5)
 +							{
 +								XSingleton<XDebug>.singleton.AddErrorLog("load server manifest bundle error.", null, null, null, null, null);
 +								XSingleton<XLoadingUI>.singleton.SetStatus(XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_FETCHMANIFESTERROR"), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +								XSingleton<XUpdater>.singleton.OnError();
 +							}
 +							else
 +							{
 +								AsyncVersionProcessRequest avpr = callback1(asset as TextAsset);
 +								while (!avpr.IsDone)
 +								{
 +									Thread.Sleep(1);
 +								}
 +								bool flag6 = callback2 != null;
 +								if (flag6)
 +								{
 +									callback2(avpr.IsCorrect);
 +								}
 +								ab.Unload(false);
 +								avpr = null;
 +							}
 +							asset = null;
 +						}
 +						ab = null;
 +					}
 +				}
 +				else
 +				{
 +					bool flag7 = XUpdater.LaunchMode == XLaunchMode.Dev;
 +					if (flag7)
 +					{
 +						XSingleton<XUpdater>.singleton.DevStart();
 +					}
 +					else
 +					{
 +						XSingleton<XDebug>.singleton.AddErrorLog(this._server_Version.error, null, null, null, null, null);
 +						XSingleton<XLoadingUI>.singleton.SetStatus(XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_FETCHMANIFESTERROR"), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +						XSingleton<XUpdater>.singleton.OnError();
 +					}
 +				}
 +				this._server_Version.Dispose();
 +				this._server_Version = null;
 +			}
 +			else
 +			{
 +				XSingleton<XDebug>.singleton.AddErrorLog("ERROR: _server_Version is NULL!", null, null, null, null, null);
 +				XSingleton<XLoadingUI>.singleton.SetStatus(XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_FETCHMANIFESTERROR"), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +				XSingleton<XUpdater>.singleton.OnError();
 +			}
 +			yield break;
 +		}
 +
 +		private IEnumerator LocalDownload(XVersion.HandleFinishDownload callback)
 +		{
 +			string path = Application.persistentDataPath + XVersion.VERSION_FILE;
 +			bool flag = !File.Exists(path);
 +			if (flag)
 +			{
 +				bool flag2 = callback != null;
 +				if (flag2)
 +				{
 +					callback(null, null);
 +				}
 +			}
 +			else
 +			{
 +				string local_location = "file://" + path;
 +				WWW localVersion = new WWW(local_location);
 +				yield return localVersion;
 +				bool flag3 = callback != null;
 +				if (flag3)
 +				{
 +					callback(localVersion, localVersion.error);
 +				}
 +				localVersion.Dispose();
 +				localVersion = null;
 +				local_location = null;
 +				localVersion = null;
 +			}
 +			yield break;
 +		}
 +
 +		private void OnTimeOut(object o)
 +		{
 +			bool flag = XUpdater.LaunchMode == XLaunchMode.Dev;
 +			if (flag)
 +			{
 +				XSingleton<XUpdater>.singleton.DevStart();
 +				bool flag2 = (int)Application.platform == 7 || Application.platform == 0;
 +				if (flag2)
 +				{
 +					XSingleton<XDebug>.singleton.AddErrorLog("Connect to update server timeout...", null, null, null, null, null);
 +				}
 +			}
 +			else
 +			{
 +				XSingleton<XLoadingUI>.singleton.SetStatus(XSingleton<XStringTable>.singleton.GetString("XUPDATE_ERROR_CANNOTCONNECTTOSERVER"), byte.MaxValue, byte.MaxValue, byte.MaxValue);
 +				XSingleton<XUpdater>.singleton.OnError();
 +			}
 +			base.StopAllCoroutines();
 +			this._server_Version.Dispose();
 +			this._server_Version = null;
 +		}
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XVersion.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XVersion.cs.meta new file mode 100644 index 00000000..4c400128 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XVersion.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dc1c1d77f6956704f90eda9af3c6ef9b +timeCreated: 1611465795 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XVersionData.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XVersionData.cs new file mode 100644 index 00000000..714d2189 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XVersionData.cs @@ -0,0 +1,287 @@ +using System;
 +using System.Collections.Generic;
 +using System.Text.RegularExpressions;
 +using XUtliPoolLib;
 +
 +namespace XUpdater
 +{
 +	[Serializable]
 +	public class XVersionData : IComparable<XVersionData>
 +	{
 +		public bool HasRCVersion
 +		{
 +			get
 +			{
 +				return this.rc_Build_Version > 0u || this.rc_Minor_Version > 0u;
 +			}
 +		}
 +
 +		public bool IsNewly
 +		{
 +			get
 +			{
 +				return this.Build_Version == 0u && this.Minor_Version == 0u;
 +			}
 +		}
 +
 +		public uint Major_Version
 +		{
 +			get
 +			{
 +				return this._major_version;
 +			}
 +		}
 +
 +		private static readonly string pattern = "^(\\d+).(\\d+).(\\d+)(.(\\d+)p(\\d+))?\\b";
 +
 +		private static Regex r = new Regex(XVersionData.pattern);
 +
 +		private uint _major_version;
 +
 +		public uint Build_Version = 0u;
 +
 +		public uint Minor_Version = 0u;
 +
 +		public uint rc_Build_Version = 0u;
 +
 +		public uint rc_Minor_Version = 0u;
 +
 +		public uint MD5_Size = 1048576u;
 +
 +		public BuildTarget Target_Platform = BuildTarget.Unknown;
 +
 +		public List<XBundleData> Bundles = new List<XBundleData>();
 +
 +		public List<XResPackage> Res = new List<XResPackage>();
 +
 +		public List<XMetaResPackage> AB = new List<XMetaResPackage>();
 +
 +		public List<XMetaResPackage> Scene = new List<XMetaResPackage>();
 +
 +		public List<XMetaResPackage> FMOD = new List<XMetaResPackage>();
 +
 +		public XVersionData()
 +		{
 +			this._major_version = XUpdater.Major_Version;
 +		}
 +
 +		public XVersionData(uint major)
 +		{
 +			this._major_version = major;
 +		}
 +
 +		public XVersionData(XVersionData rhs) : this()
 +		{
 +			this.VersionCopy(rhs);
 +		}
 +
 +		public void VersionCopy(XVersionData rhs)
 +		{
 +			bool flag = rhs == null;
 +			if (flag)
 +			{
 +				this.Build_Version = 0u;
 +				this.Minor_Version = 0u;
 +				this.rc_Build_Version = 0u;
 +				this.rc_Minor_Version = 0u;
 +			}
 +			else
 +			{
 +				this.Build_Version = rhs.Build_Version;
 +				this.Minor_Version = rhs.Minor_Version;
 +				this.rc_Build_Version = rhs.rc_Build_Version;
 +				this.rc_Minor_Version = rhs.rc_Minor_Version;
 +			}
 +		}
 +
 +		public void RC()
 +		{
 +			bool hasRCVersion = this.HasRCVersion;
 +			if (!hasRCVersion)
 +			{
 +				this.rc_Build_Version = 1u;
 +			}
 +		}
 +
 +		public XVersionData Increment(bool rebuild)
 +		{
 +			XVersionData xversionData = new XVersionData(this);
 +			if (rebuild)
 +			{
 +				bool hasRCVersion = this.HasRCVersion;
 +				if (hasRCVersion)
 +				{
 +					xversionData.rc_Build_Version += 1u;
 +					xversionData.rc_Minor_Version = 0u;
 +				}
 +				else
 +				{
 +					xversionData.Build_Version += 1u;
 +					xversionData.Minor_Version = 0u;
 +					xversionData.rc_Build_Version = 0u;
 +					xversionData.rc_Minor_Version = 0u;
 +				}
 +			}
 +			else
 +			{
 +				bool hasRCVersion2 = this.HasRCVersion;
 +				if (hasRCVersion2)
 +				{
 +					xversionData.rc_Minor_Version += 1u;
 +				}
 +				else
 +				{
 +					xversionData.Minor_Version += 1u;
 +					xversionData.rc_Build_Version = 0u;
 +					xversionData.rc_Minor_Version = 0u;
 +				}
 +			}
 +			return xversionData;
 +		}
 +
 +		public override string ToString()
 +		{
 +			return this.HasRCVersion ? string.Format("{0}.{1}.{2}.{3}p{4}", new object[]
 +			{
 +				this._major_version,
 +				this.Build_Version,
 +				this.Minor_Version,
 +				this.rc_Build_Version,
 +				this.rc_Minor_Version
 +			}) : string.Format("{0}.{1}.{2}", this._major_version, this.Build_Version, this.Minor_Version);
 +		}
 +
 +		public static XVersionData Convert2Version(string version)
 +		{
 +			Match match = XVersionData.r.Match(version);
 +			bool success = match.Success;
 +			XVersionData result;
 +			if (success)
 +			{
 +				XVersionData xversionData = new XVersionData(uint.Parse(match.Groups[1].Value));
 +				xversionData.Build_Version = uint.Parse(match.Groups[2].Value);
 +				xversionData.Minor_Version = uint.Parse(match.Groups[3].Value);
 +				bool flag = !string.IsNullOrEmpty(match.Groups[4].Value);
 +				if (flag)
 +				{
 +					xversionData.rc_Build_Version = uint.Parse(match.Groups[5].Value);
 +					xversionData.rc_Minor_Version = uint.Parse(match.Groups[6].Value);
 +				}
 +				result = xversionData;
 +			}
 +			else
 +			{
 +				result = null;
 +			}
 +			return result;
 +		}
 +
 +		public int CompareTo(XVersionData other)
 +		{
 +			bool flag = other == null;
 +			int result;
 +			if (flag)
 +			{
 +				result = 1;
 +			}
 +			else
 +			{
 +				bool flag2 = this._major_version == other.Major_Version;
 +				if (flag2)
 +				{
 +					bool flag3 = this.Build_Version == other.Build_Version;
 +					if (flag3)
 +					{
 +						bool flag4 = this.Minor_Version == other.Minor_Version;
 +						if (flag4)
 +						{
 +							bool flag5 = this.rc_Build_Version == other.rc_Build_Version;
 +							if (flag5)
 +							{
 +								bool flag6 = this.rc_Minor_Version == other.rc_Minor_Version;
 +								if (flag6)
 +								{
 +									result = 0;
 +								}
 +								else
 +								{
 +									result = (int)(this.rc_Minor_Version - other.rc_Minor_Version);
 +								}
 +							}
 +							else
 +							{
 +								result = (int)(this.rc_Build_Version - other.rc_Build_Version);
 +							}
 +						}
 +						else
 +						{
 +							result = (int)(this.Minor_Version - other.Minor_Version);
 +						}
 +					}
 +					else
 +					{
 +						result = (int)(this.Build_Version - other.Build_Version);
 +					}
 +				}
 +				else
 +				{
 +					result = (int)(this._major_version - other.Major_Version);
 +				}
 +			}
 +			return result;
 +		}
 +
 +		public bool CanUpdated(XVersionData other)
 +		{
 +			bool flag = this._major_version == other.Major_Version;
 +			if (flag)
 +			{
 +				bool flag2 = this.Build_Version == other.Build_Version;
 +				if (flag2)
 +				{
 +					bool flag3 = this.Minor_Version == other.Minor_Version;
 +					if (!flag3)
 +					{
 +						return !this.HasRCVersion && !other.HasRCVersion;
 +					}
 +					bool flag4 = this.rc_Build_Version == other.rc_Build_Version;
 +					if (flag4)
 +					{
 +						return true;
 +					}
 +				}
 +			}
 +			return false;
 +		}
 +
 +		public bool NeedDownload(string version)
 +		{
 +			XVersionData xversionData = XVersionData.Convert2Version(version);
 +			bool flag = xversionData == null;
 +			bool result;
 +			if (flag)
 +			{
 +				XSingleton<XDebug>.singleton.AddErrorLog("Error bundle with name ", version, null, null, null, null);
 +				result = false;
 +			}
 +			else
 +			{
 +				result = (this.CompareTo(xversionData) < 0);
 +			}
 +			return result;
 +		}
 +
 +		public XBundleData GetSpecificBundle(string name)
 +		{
 +			for (int i = 0; i < this.Bundles.Count; i++)
 +			{
 +				bool flag = name == this.Bundles[i].Name;
 +				if (flag)
 +				{
 +					return this.Bundles[i];
 +				}
 +			}
 +			return null;
 +		}
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XVersionData.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XVersionData.cs.meta new file mode 100644 index 00000000..d316b132 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/XVersionData.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 167c1ce87a560024da3c8f9f142f83da +timeCreated: 1611465295 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:  diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/eUPdatePhase.cs b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/eUPdatePhase.cs new file mode 100644 index 00000000..560b15cd --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/eUPdatePhase.cs @@ -0,0 +1,20 @@ +using System;
 +
 +namespace XUpdater
 +{
 +	internal enum eUPdatePhase
 +	{
 +		xUP_None,
 +		xUP_Prepare,
 +		xUP_FetchVersion,
 +		xUP_LoadVersion,
 +		xUP_CompareVersion,
 +		xUP_DownLoadConfirm,
 +		xUP_DownLoadBundle,
 +		xUP_ShowVersion,
 +		xUP_LaunchGame,
 +		xUP_Ending,
 +		xUP_Finish,
 +		xUP_Error
 +	}
 +}
 diff --git a/Client/Assets/Scripts/XUtliPoolLib/XUpdater/eUPdatePhase.cs.meta b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/eUPdatePhase.cs.meta new file mode 100644 index 00000000..a4dd6f19 --- /dev/null +++ b/Client/Assets/Scripts/XUtliPoolLib/XUpdater/eUPdatePhase.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b8a4179b6e8aefe4aadb7ec6af562313 +timeCreated: 1611465748 +licenseType: Free +MonoImporter: +  serializedVersion: 2 +  defaultReferences: [] +  executionOrder: 0 +  icon: {instanceID: 0} +  userData:  +  assetBundleName:  +  assetBundleVariant:   | 
