//-------------------------------------------------------- 
 | 
//    [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, 
 | 
    } 
 | 
  
 | 
} 
 |