/// <summary>
    /// 解析本地版本文件
    /// </summary>
    /// <param name="bytes"></param>
    public static void ParseLocalVersionFile(byte[] bytes)
    {
        byte[] rawBytes = GZipFileUtil.Uncompress(bytes);
        string dataStr  = Encoding.UTF8.GetString(rawBytes);

        _localFileDic = new Dictionary <string, FileVerInfo>();
        _cacheFileDic = new Dictionary <string, FileVerInfo>();
        string[] splitStr     = new string[] { "\n" };
        string[] data         = dataStr.Split(splitStr, StringSplitOptions.None);
        char[]   fileVerSplit = new char[] { ':', '|' };
        foreach (string fileVerStr in data)
        {
            string[] fileVer = fileVerStr.Split(fileVerSplit);
            if (fileVer.Length < 3)
            {
                continue;
            }
            FileVerInfo info = new FileVerInfo();
            info.relativePath = fileVer[0];
            info.absolutePath = Path.Combine(AssetPathUtil.StreamingAssetPath, info.relativePath);
            info.md5Code      = fileVer[1];
            info.size         = uint.Parse(fileVer[2]);
            _localFileDic.Add(info.relativePath, info);
        }
    }
Esempio n. 2
0
    private void OnNewResLoadComplete(object content)
    {
        WWW         www          = content as WWW;
        FileVerInfo loadedFile   = _loadFileDic[www.url];
        string      relativePath = loadedFile.relativePath;
        string      outputPath   = AssetPathUtil.PersistentDataPath + relativePath;

        using (FileStream fileStream = System.IO.File.Create(outputPath))
        {
            fileStream.Write(www.bytes, 0, www.bytes.Length);
            fileStream.Flush();
            fileStream.Close();
        }
        VersionManager.AddCacheFileInfo(loadedFile);
        _loadedCount++;
        _loadingView.SetPercent((float)_loadedCount / _totalCount - 0.01f);
        if (_loadedCount == _totalCount)
        {
            _isStartUpdate = false;
            _loadingView.SetTitle("正在解压资源,不消耗任何流量。");
            VersionManager.localVersion = VersionManager.remoteVersion;
            VersionManager.SaveCacheVersionFile(false);
            StartGame();
        }
    }
    /// <summary>
    /// 获取资源的绝对路径
    /// </summary>
    /// <param name="relativePath"></param>
    /// <returns></returns>
    public static string GetPath(string relativePath)
    {
        if (_localFileDic == null)
        {
            return("");
        }
        if (!_localFileDic.ContainsKey(relativePath))
        {
            Debug.LogWarning("Not Exist " + relativePath);
            return("");
        }
        FileVerInfo info = _localFileDic[relativePath];

        return(info.absolutePath);
    }
 //添加本地文件信息
 public static void AddCacheFileInfo(FileVerInfo info)
 {
     if (_localFileDic.ContainsKey(info.relativePath))
     {
         _localFileDic[info.relativePath] = info;
     }
     else
     {
         _localFileDic.Add(info.relativePath, info);
     }
     if (_cacheFileDic.ContainsKey(info.relativePath))
     {
         _cacheFileDic[info.relativePath] = info;
     }
     else
     {
         _cacheFileDic.Add(info.relativePath, info);
     }
 }
    /// <summary>
    /// 解析CDN版本文件获取热更新文件表
    /// </summary>
    /// <param name="bytes"></param>
    public static List <FileVerInfo> ParseRemoteVersionFile(byte[] bytes)
    {
        List <FileVerInfo> downLoadList = new List <FileVerInfo>();

        byte[] rawBytes = GZipFileUtil.Uncompress(bytes);
        string dataStr  = Encoding.UTF8.GetString(rawBytes);

        string[] splitStr     = new string[] { "\n" };
        string[] data         = dataStr.Split(splitStr, StringSplitOptions.None);
        char[]   fileVerSplit = new char[] { ':', '|' };
        foreach (string fileVerStr in data)
        {
            string[] fileVer = fileVerStr.Split(fileVerSplit);
            if (fileVer.Length < 3)
            {
                continue;
            }
            FileVerInfo info = new FileVerInfo();
            info.relativePath = fileVer[0];
            info.absolutePath = AssetPathUtil.PersistentDataPath + info.relativePath;
            info.md5Code      = fileVer[1];
            info.size         = uint.Parse(fileVer[2]);

            if (_localFileDic.ContainsKey(info.relativePath))
            {
                FileVerInfo localFileInfo = _localFileDic[info.relativePath];
                if (localFileInfo.md5Code != info.md5Code)
                {
                    downLoadList.Add(info);
                }
            }
            else
            {
                downLoadList.Add(info);
            }
        }
        return(downLoadList);
    }
    /// <summary>
    /// 解析缓存版本文件
    /// </summary>
    /// <param name="bytes"></param>
    public static void ParseCacheVersionFile(byte[] bytes)
    {
        string dataStr = Encoding.UTF8.GetString(bytes);

        string[] splitStr = new string[] { "\n" };
        string[] data     = dataStr.Split(splitStr, StringSplitOptions.None);
        //第一段为缓存版本号
        cacheVersion = data[0];
        if (!CheckCacheVersionIsOld())
        {
            char[] fileVerSplit = new char[] { ':', '|' };
            int    fileVerCount = data.Length;
            for (int i = 1; i < fileVerCount; i++)
            {
                string[] fileVer = data[i].Split(fileVerSplit);
                if (fileVer.Length < 3)
                {
                    continue;
                }
                FileVerInfo info = new FileVerInfo();
                info.relativePath = fileVer[0];
                info.absolutePath = AssetPathUtil.PersistentDataPath + info.relativePath;
                info.md5Code      = fileVer[1];
                info.size         = uint.Parse(fileVer[2]);
                _cacheFileDic.Add(info.relativePath, info);
                Debug.Log(info.relativePath + "in the cache");
                if (_localFileDic.ContainsKey(info.relativePath))
                {
                    _localFileDic[info.relativePath] = info;
                }
                else
                {
                    _localFileDic.Add(info.relativePath, info);
                }
            }
        }
    }