Beispiel #1
0
    private void ThrowUpdateError(UpdateErrorType errorType)
    {
        _updateErrorType = errorType;


        Console_WriteLine("Update error: " + errorType.ToString());
    }
Beispiel #2
0
 /// <summary>
 /// 加载错误回调
 /// </summary>
 /// <param name="type"></param>
 /// <param name="error"></param>
 /// <param name="loc"></param>
 public void OnError(UpdateErrorType type, string error = "", Loc loc = Loc.Persistent)
 {
     //CoroutineHelper.ins.QueueOnMainThread(() =>
     //{
     //    UpdateError(GetErrorStr(type));
     //});
 }
Beispiel #3
0
        /// <summary>
        /// 获取错误描述
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        private string GetErrorStr(UpdateErrorType type)
        {
            var msg = string.Empty;

            switch (type)
            {
            case UpdateErrorType.NetWorkErr:
                msg = Localization.Get("update_wangluoshibai");
                break;

            case UpdateErrorType.NoSpace:
                msg = Localization.Get("update_kongjianbuzu");
                break;

            case UpdateErrorType.ReadMd5Err:
                msg = Localization.Get("update_jianchawenjianshibai");
                break;

            case UpdateErrorType.ReadVersionErr:
                msg = Localization.Get("update_jianchabanbenshibai");
                break;

            case UpdateErrorType.DownloadMd5Err:
                msg = Localization.Get("update_xiazaiwenjianshibai");
                break;

            case UpdateErrorType.DownloadVersionErr:
                msg = Localization.Get("update_xiazaibanbenshibai");
                break;
            }

            return(msg);
        }
Beispiel #4
0
 internal UpdateException(UpdateErrorType updateErrorType)
 {
     this.UpdateErrorType = updateErrorType;
 }
Beispiel #5
0
 private void ResetUpdateError()
 {
     _updateErrorType = UpdateErrorType.None;
     _cancelDownload  = false;
 }
Beispiel #6
0
    IEnumerator StartUpdate()
    {
        //更新下载进度
        var loadingPanel = UIModule.Instance.GetOrCreateUI <LoadingPanel>();

        loadingPanel.DisPlay(true);

        var appDataPath = KResourceModule.AppDataPath;
        //TODO 是否所有资源都下载成功
        var total = downloadFiles.Count;

        for (int i = 0; i < total; i++)
        {
            yield return(Game.Instance.StartCoroutine(DownloadItem(downloadFiles[i], appDataPath)));
        }

        Log.LogToFile(total > 0 ? "下载更新资源完成" : "本次无需下载新资源");
        try
        {
            //更新filelist
            if (filelistBuilder.Length > 0)
            {
                var dirName = Path.GetDirectoryName(appDataPath + AppConfig.FilelistPath);
                if (Directory.Exists(dirName) == false)
                {
                    Directory.CreateDirectory(dirName);
                }
                File.WriteAllText(appDataPath + AppConfig.FilelistPath, filelistBuilder.ToString());
                Log.LogToFile("filelist更新完成");
            }
            else
            {
                Log.LogToFile("本次filelist无需更新");
            }

            //更新version
            if (versionBuilder.Length > 0)
            {
                if (filelistVersion == null)
                {
                    Log.LogError("更新version.txt中的filelist.txt version 失败,data is null");
                }
                if (filelistVersion != null)
                {
                    versionBuilder.AppendLine(filelistVersion.ToFilelistFormat());
                }
                var dirName = Path.GetDirectoryName(appDataPath + AppConfig.VersionTxtName);
                if (Directory.Exists(dirName) == false)
                {
                    Directory.CreateDirectory(dirName);
                }
                File.WriteAllText(appDataPath + AppConfig.VersionTxtName, versionBuilder.ToString());
                Log.LogToFile("version更新完成");
            }
            else
            {
                Log.LogToFile("本次version无需更新");
            }
        }
        catch (Exception e)
        {
            Log.LogError($"保存filelist出错,{e.Message}");
            ErrorType = UpdateErrorType.DownloadError;
        }

        //解压可以放在多线程中
        loadingPanel.SetProgress(I18N.Get("download_unpackzip"));
        bool waitLua = true, waitSetting = true;

        if (needUnpackLua)
        {
            KAsync.Start().Thread(() => UnpackZip(appDataPath + "/lua.zip", appDataPath + "/Lua/", () => waitLua = false));
        }
        else
        {
            waitLua = false;
        }

        if (needUnpackSetting)
        {
            KAsync.Start().Thread(() => UnpackZip(appDataPath + "/setting.zip", appDataPath + "/Setting/", () => waitSetting = false));
        }
        else
        {
            waitSetting = false;
        }

        loadingPanel = UIModule.Instance.GetExistUI <LoadingPanel>();
        loadingPanel?.SetFixProgress(1 - zipPercent, 1.0f);
        WaitForSeconds wait = new WaitForSeconds(0.05f);

        while (waitLua || waitSetting)
        {
            loadingPanel?.UpdateFixedProgress();
            yield return(wait);
        }

        DownloadFinish = true;
        if (needUnpackLua || needUnpackSetting)
        {
            Log.LogToFile("解压更新资源完成");
        }
        ClearData();
    }
Beispiel #7
0
    public IEnumerator CheckDownload()
    {
        ClearData();
        var loadingPanel = UIModule.Instance.GetOrCreateUI <LoadingPanel>();

        loadingPanel.SetProgress(I18N.Get("download_check"));
        loadingPanel.DisPlay(true);
        string url = AppConfig.resUrl + AppConfig.VersionTxtName;

        Log.LogToFile($"读取远程version.txt:{url}");
        var loader = KWWWLoader.Load(url);

        while (!loader.IsCompleted)
        {
            yield return(null);
        }

        if (!loader.IsError)
        {
            ParseText(loader.Www.text, remoteVersion);
            remoteVersion.TryGetValue("filelist.txt", out filelistVersion);
        }
        else
        {
            ErrorType = UpdateErrorType.RemoteVersionError;
            yield break;
        }

        url = KResourceModule.GetResourceFullPath(AppConfig.VersionTxtName, false);
        Log.LogToFile($"读取本地version.txt:{url}");
        loader = KWWWLoader.Load(url);
        while (!loader.IsCompleted)
        {
            yield return(null);
        }

        if (!loader.IsError)
        {
            ParseText(loader.Www.text, localVersion);
        }
        else
        {
            ErrorType = UpdateErrorType.LocalVersionError;
            yield break;
        }

        loader.Dispose();
        loader = null;
        CompareVersion("lua.zip");
        CompareVersion("setting.zip");
        bool filelistSame = CompareVersion("filelist.txt", false);

        if (filelistSame == false)
        {
            //对比ab列表
            string remote_filelist = null;
            url    = AppConfig.resUrl + AppConfig.FilelistPath;
            loader = KWWWLoader.Load(url);
            while (!loader.IsCompleted)
            {
                yield return(null);
            }

            if (!loader.IsError)
            {
                remote_filelist = loader.Www.text;
            }
            else
            {
                ErrorType = UpdateErrorType.FilelistnError;
            }
            url    = KResourceModule.GetResourceFullPath(AppConfig.FilelistPath, false);
            loader = KWWWLoader.Load(url);
            while (!loader.IsCompleted)
            {
                yield return(null);
            }

            //开始对比两个filelist
            if (!loader.IsError)
            {
                GetDownloadFromFilelist(loader.Www.text, remote_filelist);
            }
            else
            {
                ErrorType = UpdateErrorType.LocalFilelistnError;
            }
        }

        if (downloadFiles.Count > 0)
        {
            var          panel = UIModule.Instance.GetOrCreateUI <KUIMsgBox>();
            UIMsgBoxInfo info  = new UIMsgBoxInfo().GetDefalut(I18N.Get("download_msg", KTool.FormatFileSize(downloadTotalSize)), strCancel: I18N.Get("common_skip"));
            info.OkCallback     = () => { Game.Instance.StartCoroutine(StartUpdate()); };
            info.CancelCallback = IngoreDownload;
            panel.info          = info;
            panel.DisPlay(true);
        }
        else
        {
            Log.LogToFile($"本次启动无资源更新,跳过下载");
            ClearData();
            DownloadFinish = true;
        }
    }