예제 #1
0
    /// <summary>
    /// 下载版本文件列表
    /// </summary>
    private void DownloadVersionFile()
    {
        allDownloadSize = 0;

        currentState = HotFix_ProjectState.DownloadVersionFile;

        var versionListServerFile = GPath.PersistentAssetsPath + serverVersion.ToString() + ".txt";

        if (File.Exists(versionListServerFile))
        {
            File.Delete(versionListServerFile);
        }

        var versionListUnit = new DownloadUnit()
        {
            Name     = serverVersion.ToString() + ".txt",
            SavePath = versionListServerFile,
            DownUrl  = GPath.CDNUrl + serverVersion.ToString() + ".txt",
        };

        versionListUnit.ErrorFun = (DownloadUnit downUnit, string msg) =>
        {
            Debug.LogWarning("CompareVersion Download Error " + msg + "\n" + downUnit.DownUrl);
            downloadMgr.DeleteDownload(versionListUnit);
            UpdateError();
        };

        versionListUnit.CompleteFun = (DownloadUnit downUnit) =>
        {
            if (!File.Exists(versionListServerFile)) // 文件不存在,重新下载
            {
                UpdateError();
                return;
            }

            fileVersionMgr.InitVersionFile(versionListServerFile);

            var updateList = fileVersionMgr.FindUpdateFiles(clientVersion.Version);

            allDownloadSize = fileVersionMgr.DownloadSize;

            Debug.Log("版本文件数量:" + updateList.Count);

            if (updateList.Count > 0)
            {
                StartDownloadList(updateList);
            }

            else
            {
                SaveVersion();
            }
        };

        downloadMgr.DownloadAsync(versionListUnit);

        Debug.Log("版本文件url:" + versionListUnit.DownUrl);
    }
예제 #2
0
    private void SaveVersion()
    {
        currentState = HotFix_ProjectState.SaveVersion;

        clientVersion.Version = serverVersion.Version + 1;

        string versionPath = GPath.PersistentAssetsPath + GPath.VersionFileName;

        File.WriteAllText(versionPath, clientVersion.Version.ToString());
    }
예제 #3
0
    /// <summary>
    /// 读取本地版本号
    /// </summary>
    private void ReadLocalVersion()
    {
        currentState = HotFix_ProjectState.ReadLocalVersion;

        var versionPath = GPath.PersistentAssetsPath + GPath.VersionFileName;

        int version;

        if (File.Exists(versionPath))
        {
            version = int.Parse(File.ReadAllText(versionPath));
        }
        else
        {
            version = int.Parse(Resources.Load <TextAsset>(GPath.VersionFileName).text);
        }

        clientVersion.Version = version;
    }
예제 #4
0
    public void Finished()
    {
        currentState = HotFix_ProjectState.Finished;

        HotFixCallback(HotFix_ProjectState.Finished, "", null);
    }
예제 #5
0
    /// <summary>
    /// 下载版本资源
    /// </summary>
    /// <param name="updateList"></param>
    private void StartDownloadList(List <FileVersionData> updateList)
    {
        currentState = HotFix_ProjectState.CompareAssetVersion;

        var saveRootPath = GPath.StreamingAssetsPath;
        var urlRootPath  = GPath.CDNUrl;

        var downloadList     = new List <DownloadUnit>();
        var downloadSizeList = new Dictionary <string, int>();
        int downloadCount    = updateList.Count;
        int downloadMaxCount = downloadCount;

        curDownloadArray = new int[downloadCount];

        int existAllSize = 0;
        int totalAllSize = 0;

        int downloadedFileSizes = 0;
        int downloadAllFileSize = 0;

        foreach (var fileData in updateList)
        {
            var savePath = saveRootPath + fileData.Name;
            if (File.Exists(savePath))
            {
                FileInfo fi = new FileInfo(savePath);
                if (fileData.Size == (int)fi.Length)
                {
                    //长度相等,可能是已经下载的
                    //downloadNameList.Add(fileData.Name, fileData.Name);
                    //existAllName += fileData.Name;
                }
                else // 长度不相等,需要重新下载
                {
                    //Utils.Log("StartDownloadList Delete fileData.Size="+ fileData.Size + " fi.Length="+ fi.Length);
                    fi.Delete();
                    downloadSizeList.Add(fileData.Name, 0);
                    totalAllSize += fileData.Size;
                }
            }
            else
            {
                downloadSizeList.Add(fileData.Name, 0);
                totalAllSize += fileData.Size;
            }

            var downloadUnit = new DownloadUnit()
            {
                Name     = fileData.Name,
                DownUrl  = urlRootPath + fileData.Version + "/Assets/" + fileData.Name,
                SavePath = savePath,
                Size     = fileData.Size,
                Md5      = fileData.Md5,
            };

            downloadUnit.ErrorFun = (DownloadUnit downUnit, string msg) =>
            {
                string errorMgs = "StartDownloadList Error " + downUnit.DownUrl + " " + msg + "\n";
                Debug.LogWarning(errorMgs);
            };

            downloadUnit.ProgressFun = (DownloadUnit downUnit, int curSize, int allSize) =>
            {
                curDownloadArray[downloadMaxCount - downloadCount] = curSize;

                if (downloadSizeList.ContainsKey(downUnit.Name))
                {
                    downloadedFileSizes += curSize - downloadSizeList[downUnit.Name];

                    downloadSizeList[downUnit.Name] = curSize;
                }
                else
                {
                    Debug.LogError("downUnit 不存在 = " + downUnit.Name);
                }

                UpdateProgress?.Invoke(DownloadProgress);

                //Debug.LogFormat("正在下载资源:{0},已下载大小:{1},总大小:{2}", downUnit.Name, curSize, allSize);
            };

            downloadUnit.CompleteFun = (DownloadUnit downUnit) =>
            {
                downloadCount--;

                int percent = (downloadMaxCount - downloadCount) * 10 / downloadMaxCount;

                if (downloadCount == 0) // 下载完成
                {
                    SaveVersion();

                    HotFixCallback(HotFix_ProjectState.Finished, "下载完成", null);
                }
            };

            downloadList.Add(downloadUnit);
        }

        downloadedFileSizes = 0;
        downloadAllFileSize = totalAllSize;

        //如果文件都存在,用已下载的作为长度,概率极低,为了表现进度特殊处理
        if (totalAllSize == 0)
        {
            downloadedFileSizes = 1;
            downloadAllFileSize = 1;
        }

        Debug.Log("下载文件总大小:" + totalAllSize);

        Action downloadFun = () =>
        {
            currentState = HotFix_ProjectState.DownloadFiles;
            foreach (var downUnit in downloadList)
            {
                downloadMgr.DownloadAsync(downUnit);
            }
        };

        if (totalAllSize < 1024 * 1024) //<1MB
        {
            downloadFun();
        }
        else
        {
            HotFixCallback(HotFix_ProjectState.RequestDownloadFiles, "游戏需要更新部分资源(" +
                           (totalAllSize / 1024 / 1024) + "M),建议您在无线局域网环境下更新", (run) =>
            {
                if (run == true)
                {
                    downloadFun();
                }
            });
        }
    }
예제 #6
0
    /// <summary>
    /// 读取服务端版本号
    /// </summary>
    public void CheckCDNVersion()
    {
        downloadMgr.ClearAllDownloads();

        currentState = HotFix_ProjectState.CheckCDNVersion;

        string versionServerFile = GPath.PersistentAssetsPath + "versionServer.txt";

        if (File.Exists(versionServerFile))
        {
            File.Delete(versionServerFile);
        }

        var versionUnit = new DownloadUnit()
        {
            Name     = "version.txt",
            DownUrl  = GPath.CDNUrl + GPath.VersionFileName,
            SavePath = versionServerFile
        };

        versionUnit.ErrorFun = (DownloadUnit downUnit, string msg) =>
        {
            Debug.LogWarning("CheckAssetVersion Download Error " + msg + "\n" + downUnit.DownUrl);
            downloadMgr.DeleteDownload(versionUnit);
            UpdateError();
        };

        versionUnit.CompleteFun = (DownloadUnit downUnit) =>
        {
            if (!File.Exists(versionServerFile)) // 文件不存在,重新下载
            {
                UpdateError();
                return;
            }

            string versionStr = File.ReadAllText(versionServerFile);

            if (!int.TryParse(versionStr, out int curVersion))
            {
                Debug.LogError("CheckAssetVersion version Error " + versionStr);
                UpdateError();
                return;
            }

            serverVersion.Version = curVersion;

            Debug.Log("本地版本:" + clientVersion + " 服务器版本:" + curVersion);

            if (serverVersion.MidVer < clientVersion.MidVer)
            {
                UpdateError();
            }
            else if (serverVersion.MidVer > clientVersion.MidVer) // 换包
            {
                HotFixCallback(HotFix_ProjectState.RequestErrorRestart, "", (run) =>
                {
                });
            }
            else if (serverVersion.MinVer < clientVersion.MinVer)
            {
                Finished();
            }
            else
            {
                DownloadVersionFile();
            }
        };

        downloadMgr.DownloadAsync(versionUnit);
    }