| //-------------------------------------------------------- | 
| //    [Author]:           玩个游戏 | 
| //    [  Date ]:           Thursday, March 15, 2018 | 
| //-------------------------------------------------------- | 
| using UnityEngine; | 
| using System.Collections; | 
| using UnityEngine.UI; | 
| using System.Collections.Generic; | 
| using System; | 
| using LitJson; | 
| using System.IO; | 
| using System.Text; | 
|   | 
|   | 
|   | 
| public class VersionUtility : Singleton<VersionUtility> | 
| { | 
|     public static readonly string[] VERSION_URL = new string[] { | 
|         "http://gamecenter.secondworld.net.cn:11000/center/appversion_new.php/?"}; | 
|   | 
|     public string androidRoot { get { return string.Empty;/*StringUtility.Contact(SDKUtils.Instance.DeviceRootPath, "/", VersionConfig.Get().bundleIdentifier);*/ } } | 
|   | 
|     public DownloadTask downloadTask; | 
|     private string versionUrl; | 
|     public float progress | 
|     { | 
|         get { return downloadTask == null ? 0 : (downloadTask.downloadedBytes / ((float)GetApkSize() * 1024)); } | 
|     } | 
|   | 
|     public VersionInfo versionInfo { get; private set; } | 
|     Dictionary<string, ApkDownUrl> apkDownUrls = new Dictionary<string, ApkDownUrl>(); | 
|   | 
|     public bool completed { get { return step == Step.Completed; } } | 
|   | 
|     Step m_Step = Step.None; | 
|     public Step step | 
|     { | 
|         get { return m_Step; } | 
|         private set | 
|         { | 
|             if (m_Step != value) | 
|             { | 
|                 m_Step = value; | 
|                 if (downLoadStepChangeEvent != null) | 
|                 { | 
|                     downLoadStepChangeEvent(m_Step); | 
|                 } | 
|             } | 
|         } | 
|     } | 
|   | 
|     public event Action<Step> downLoadStepChangeEvent; | 
|   | 
|     int urlIndex = 0; | 
|   | 
|     public void RequestVersionCheck() | 
|     { | 
|         m_Step = Step.None; | 
|         //var tables = new Dictionary<string, string>(); | 
|         //tables["channel"] = VersionConfig.Get().appId; | 
|         //tables["versioncode"] = VersionConfig.Get().version; | 
|         //if (VersionConfig.Get().branch != 0) | 
|         //{ | 
|         //    tables["branch"] = VersionConfig.Get().branch.ToString(); | 
|         //} | 
|   | 
|         //tables["game"] = VersionConfig.Get().gameId; | 
|   | 
|         //var url = StringUtility.Contact(VERSION_URL[urlIndex % 2], HttpRequest.HashtablaToString(tables)); | 
|         //urlIndex++; | 
|         //versionUrl = url; | 
|         //Debug.Log("http地址:versionUrl  " + url); | 
|         //HttpRequest.Instance.RequestHttpGet(url, HttpRequest.defaultHttpContentType, 1, OnVersionCheckResult); | 
|         OnVersionCheckResult(true, LocalResManager.versionUrlResult); | 
|     } | 
|   | 
|     private void OnVersionCheckResult(bool _ok, string _result) | 
|     { | 
|         if (_ok) | 
|         { | 
|             //_result = _result.Replace("{}", "null"); | 
|             versionInfo = JsonMapper.ToObject<VersionInfo>(_result); | 
|             versionInfo.downAsset = 1; | 
|             if (NeedNormalUpdate()) | 
|             { | 
|                 if (Application.isMobilePlatform || Application.platform == RuntimePlatform.WindowsEditor) | 
|                 { | 
|                     RequestApkDownConfigs(); | 
|                 } | 
|                 else | 
|                 { | 
|                     step = Step.Completed; | 
|                 } | 
|             } | 
|             else | 
|             { | 
|                 step = Step.Completed; | 
|   | 
|                 var apkFiles = new DirectoryInfo(ResourcesPath.Instance.ExternalStorePath).GetFiles("*.apk"); | 
|                 for (int i = apkFiles.Length - 1; i >= 0; i--) | 
|                 { | 
|                     File.Delete(apkFiles[i].FullName); | 
|                 } | 
|             } | 
|         } | 
|         else | 
|         { | 
|             Debug.Log("Aot 请求失败" + _result); | 
|             //Debug.Log("http 数据通讯: VersionUtility:" + versionUrl + "  result:" + _result); | 
|             ////BuglyAgent.ReportException(new System.Exception(),"http 数据通讯: VersionUtility:" +versionUrl + "  result:" + _result); | 
|             //step = Step.None; | 
|             //Clock.AlarmAt(DateTime.Now + new TimeSpan(TimeSpan.TicksPerSecond), RequestVersionCheck); | 
|         } | 
|     } | 
|   | 
|   | 
|     public void RequestApkDownConfigs() | 
|     { | 
|         //  YLTODO | 
|         // UIManager.Instance.OpenWindow<VersionUpdateWin>(); | 
|         //  // WindowCenter.Instance.OpenFromLocal<VersionUpdateWin>(); | 
|     } | 
|   | 
|     public bool NeedNormalUpdate() | 
|     { | 
|         return versionInfo != null && versionInfo.downAsset == 1 && versionInfo.VersionCount > 0; | 
|     } | 
|   | 
|     public ApkDownUrl GetApkDownUrl() | 
|     { | 
|         var flag = SDKUtils.Instance.GetSplicePackageID(); | 
|         if (apkDownUrls.ContainsKey(flag)) | 
|             return apkDownUrls[flag]; | 
|         else return null; | 
|     } | 
|   | 
|     public string GetApkLocalUrl() | 
|     { | 
|         var apk = GetApkDownUrl(); | 
|         if (apk == null) | 
|             return string.Empty; | 
|         if (!apk.isApk) | 
|             return string.Empty; | 
|         var remoteURL = GetApkRemoteUrl(); | 
|         var fileName = Path.GetFileName(remoteURL); | 
|         return StringUtility.Contact(androidRoot, "/", fileName); | 
|     } | 
|   | 
|     public string GetApkRemoteUrl() | 
|     { | 
|         if (versionInfo == null) | 
|         { | 
|             return string.Empty; | 
|         } | 
|   | 
|         var flag = SDKUtils.Instance.GetSplicePackageID(); | 
|         if (apkDownUrls.ContainsKey(flag)) | 
|         { | 
|             return apkDownUrls[flag].url; | 
|         } | 
|         else | 
|         { | 
|             return string.Empty; | 
|         } | 
|   | 
|     } | 
|   | 
|     public int GetApkSize() | 
|     { | 
|         if (versionInfo == null) | 
|         { | 
|             return 0; | 
|         } | 
|   | 
|   | 
|         var flag = SDKUtils.Instance.GetSplicePackageID(); | 
|         if (apkDownUrls.ContainsKey(flag)) | 
|         { | 
|             return apkDownUrls[flag].size; | 
|         } | 
|         else | 
|         { | 
|             return 0; | 
|         } | 
|   | 
|     } | 
|   | 
|     public string GetUpdateContent() | 
|     { | 
|         var apk = GetApkDownUrl(); | 
|         if (apk == null) | 
|             return string.Empty; | 
|         return apk.updateContent; | 
|     } | 
|   | 
|     public void StartDownLoad() | 
|     { | 
|         step = Step.DownLoad; | 
|         var remoteURL = GetApkRemoteUrl(); | 
|         var apkLocalUrl = GetApkLocalUrl(); | 
|   | 
|         downloadTask = new DownloadTask(remoteURL, apkLocalUrl); | 
|         downloadTask.BeginDownload(OnDownLoadApkCompleted); | 
|     } | 
|   | 
|     private void OnDownLoadApkCompleted(DownloadTask task) | 
|     { | 
|         if (task.IsDone) | 
|         { | 
|             step = Step.Completed; | 
|             UIManager.Instance.CloseWindow<VersionUpdateWin>(); | 
|             //  // WindowCenter.Instance.Close<VersionUpdateWin>(); | 
|             SDKUtils.Instance.InstallAPK(GetApkLocalUrl()); | 
|         } | 
|         else | 
|         { | 
|             step = Step.DownLoadFailed; | 
|         } | 
|     } | 
|   | 
|     public void SkipVersion() | 
|     { | 
|         step = Step.Completed; | 
|     } | 
|   | 
|   | 
|     /// <summary> | 
|     /// 是否为ios审核时间内 | 
|     /// </summary> | 
|     /// <returns></returns> | 
|     public bool InIosAuditTime() | 
|     { | 
|         DateTime dateTime; | 
|   | 
|         try | 
|         { | 
|             var textAsset = Resources.Load<UnityEngine.TextAsset>("Config/AuditTime"); | 
|             var content = string.Empty; | 
|             if (textAsset != null) | 
|             { | 
|                 content = textAsset.text; | 
|                 if (DateTime.TryParse(content, out dateTime)) | 
|                 { | 
|                     return DateTime.Now < dateTime; | 
|                 } | 
|                 else | 
|                 { | 
|                     return false; | 
|                 } | 
|             } | 
|             else | 
|             { | 
|                 return false; | 
|             } | 
|         } | 
|         catch (System.Exception ex) | 
|         { | 
|             return false; | 
|         } | 
|     } | 
|   | 
|     public bool NeedDownAsset() | 
|     { | 
|         if (versionInfo != null && versionInfo.downAsset == 1 && VersionConfig.Get().assetAccess != InstalledAsset.IngoreDownLoad) | 
|         { | 
|             return true; | 
|         } | 
|         else | 
|         { | 
|             return false; | 
|         } | 
|     } | 
|   | 
|     public class VersionInfo | 
|     { | 
|         public JsonData notice_flag; | 
|         public JsonData resource_url; | 
|         public string ResourceAward; | 
|         public int downAsset = 1;   //默认是1 没有代表意义 不清楚逻辑可不要改动 | 
|         public string downUrl; | 
|         public int VersionCount;    //大于0代表需要强更 | 
|   | 
|   | 
|         public string GetResourcesURL(int _branch) | 
|         { | 
|             if (resource_url != null) | 
|             { | 
|                 return resource_url[_branch.ToString()].ToString(); | 
|             } | 
|             else | 
|             { | 
|                 return string.Empty; | 
|             } | 
|         } | 
|   | 
|         public string GetNoticeURL(int _branch) | 
|         { | 
|             try | 
|             { | 
|                 if (notice_flag != null) | 
|                 { | 
|                     return notice_flag[_branch.ToString()].ToString(); | 
|                 } | 
|                 else | 
|                 { | 
|                     return string.Empty; | 
|                 } | 
|             } | 
|             catch (Exception ex) | 
|             { | 
|                 Debug.Log(ex); | 
|                 return string.Empty; | 
|             } | 
|         } | 
|   | 
|     } | 
|   | 
|     public class ApkDownUrl | 
|     { | 
|         public string flag; | 
|         public string url; | 
|         public int size; | 
|         public bool isApk;//是否是apk下载地址,0:否,1:是 | 
|         public string updateContent;//更新内容提示 | 
|   | 
|         public ApkDownUrl(string content) | 
|         { | 
|             var strings = content.Split('\t'); | 
|   | 
|             flag = strings[0]; | 
|             url = strings[1]; | 
|             int.TryParse(strings[2], out size); | 
|             isApk = strings[3] == "1"; | 
|             updateContent = strings[4]; | 
|         } | 
|     } | 
|   | 
|     public enum Step | 
|     { | 
|         None, | 
|         ApkExist, | 
|         DownLoadPrepared, | 
|         DownLoad, | 
|         DownLoadFailed, | 
|         Completed, | 
|     } | 
|   | 
| } |