Beispiel #1
0
    /// <summary>
    /// 读取serverab版本表文件
    /// </summary>
    public void LoadServerABVerDataFile()
    {
        //CReadCsvBase.ReaderCsvData(GameDefine.CsvAssetbundleName, GameDefine.AssetbundleCsvFileName, out strList);

        string path = GameDefine.AppPersistentDataPath + GameDefine.ServerAssetbundleVersionDataFile;

        //检测文件是否存在
        if (!File.Exists(path))
        {
            HttpDownloadMgr.DownFile(GameDefine.LuancherURL, GameDefine.AppPersistentDataPath, GameDefine.ServerAssetbundleVersionDataFile);
        }

        List <string[]> strList;

        CReadCsvBase.ReaderCsvDataFromFile(path, out strList);

        int columnCount = strList.Count;

        for (int i = 2; i < columnCount; i++)
        {
            CServerABVerData tempData = new CServerABVerData();
            uint.TryParse(strList[i][0], out tempData.AssetBundleId);
            tempData.AssetBundleName = strList[i][1];
            //tempData.DownloadUrlPath = strList[i][2];
            uint.TryParse(strList[i][2], out tempData.AssetbundleVersion);
            tempData.AssetbundleMd5Str = strList[i][3];
            tempData.DescriptionStr    = strList[i][4];

            ABDataDictionary.Add(tempData.AssetBundleName, tempData);
        }
    }
Beispiel #2
0
    public static bool CompareABVersionAndUpdate(string abname, bool bAsyncDown = false, byte gameid = 255)
    {
#if UNITY_EDITOR || UNITY_STANDALONE_WIN
        if (!Luancher.UpdateWithLuncher)
        {
            return(false);
        }
#endif
        LocalABVersion   lcABVerdata        = CCsvDataManager.Instance.LocalABVerDataMgr.GetLocalABVersion(abname);
        CServerABVerData sevABVerdata       = CCsvDataManager.Instance.SerABVerDataMgr.GetServerABVerData(abname);
        bool             needDownloadPpdate = false;
        if (sevABVerdata == null)
        {
            Debug.Log("服务器资源表上无此资源,请检查:" + abname);
            return(false);
        }
        if (lcABVerdata == null)
        {
            needDownloadPpdate = true;
        }
        else
        {
            if (lcABVerdata.version == sevABVerdata.AssetbundleVersion)
            {
                needDownloadPpdate = false;
            }
            else
            {
                needDownloadPpdate = true;
                //本地存在可能是旧的版本文件或者是上次未下载完成的的损坏文件先删除
                if (File.Exists(GameDefine.AssetBundleSavePath + abname))
                {
                    File.Delete(GameDefine.AssetBundleSavePath + abname);
                }
            }
        }

        //如果本地没有此资源则更新
        if (!File.Exists(GameDefine.AssetBundleSavePath + abname))
        {
            needDownloadPpdate = true;
        }

        if (needDownloadPpdate)
        {
            if (bAsyncDown)
            {
                HttpDownloadMgr.Instance.RequestDownload(GameDefine.LuancherURL, GameDefine.AssetBundleSavePath, abname, sevABVerdata.AssetbundleVersion, gameid);
            }
            else
            {
                HttpDownloadMgr.DownFile(GameDefine.LuancherURL, GameDefine.AssetBundleSavePath, abname);
                CCsvDataManager.Instance.LocalABVerDataMgr.SetLocalABVersion(abname, sevABVerdata.AssetbundleVersion);
            }
        }
        return(needDownloadPpdate);
    }
Beispiel #3
0
    /// <summary>
    /// 资源MD5检验
    /// </summary>
    private void ResourceMD5Verify()
    {
        //string hallAssetMd5str = GameCommon.GenerateFileMd5(GameDefine.AssetBundleSavePath + GameDefine.HallAssetbundleName);
        List <string> filelist        = DownLoadProcessMgr.Instance.DownloadOverFileNameList;
        bool          md5crcSuccessed = true;

        if (EnableResMD5CRC)
        {
            for (int i = 0; i < filelist.Count; i++)
            {
                CServerABVerData filesvrdata = CCsvDataManager.Instance.SerABVerDataMgr.GetServerABVerData(filelist[i]);

                if (filesvrdata == null)
                {
                    continue;
                }

                string filemd5 = GameCommon.GenerateFileMd5(GameDefine.AssetBundleSavePath + filelist[i]);
                if (filemd5.CompareTo(filesvrdata.AssetbundleMd5Str) != 0)
                {
                    File.Delete(GameDefine.AssetBundleSavePath + filelist[i]);
                    CResVersionCompareUpdate.CompareABVersionAndUpdate(filelist[i], true);
                    Debug.Log(filelist[i] + " md5 CRC fialed");
                    md5crcSuccessed = false;
                }
            }
        }

        DownLoadProcessMgr.Instance.DownloadOverFileNameList.Clear();
        if (md5crcSuccessed)
        {
            //apk更新下载完成执行安装
            if (bApkNeedUpdate)
            {
                eLuancherState = LUANCHERSTATE.LuancherState_InstallAPK;
            }
            else
            {
                eLuancherState = LUANCHERSTATE.LuancherState_StartGame;
            }
        }
        else
        {
            eLuancherState = LUANCHERSTATE.LuancherState_Downloading;
        }
    }
Beispiel #4
0
    /// <summary>
    /// 检查游戏资源是否需要下载或更新
    /// </summary>
    /// <param name="gameId"></param>
    /// <returns>0正常 ,1需下载, 2有更新</returns>
    public static byte CheckGameResNeedDownORUpdate(byte gameId)
    {
#if UNITY_EDITOR || UNITY_STANDALONE_WIN
        if (!Luancher.UpdateWithLuncher)
        {
            return(0);
        }
#endif
        GameData gamedata = CCsvDataManager.Instance.GameDataMgr.GetGameData(gameId);
        if (gamedata == null)
        {
            return(0);
        }
        byte checkstate = 0;
        //如果本地没有场景assetbundle
        if (!File.Exists(GameDefine.AssetBundleSavePath + gamedata.SceneABName))
        {
            checkstate = 1;
            return(checkstate);
        }
        //如果本地没有资源assetbundle
        if (!File.Exists(GameDefine.AssetBundleSavePath + gamedata.ResourceABName))
        {
            checkstate = 1;
            return(checkstate);
        }

        LocalABVersion lcABVerdata = CCsvDataManager.Instance.LocalABVerDataMgr.GetLocalABVersion(gamedata.SceneABName);
        //本地资源管理表中没有数据说明上次下载出错了,那么重新下
        if (lcABVerdata == null)
        {
            checkstate = 1;
            return(checkstate);
        }

        CServerABVerData sevABVerdata = CCsvDataManager.Instance.SerABVerDataMgr.GetServerABVerData(gamedata.SceneABName);
        if (sevABVerdata == null)
        {
            Debug.Log("服务器资源表上无此资源,请检查:" + gamedata.SceneABName);
            checkstate = 1;
            return(checkstate);
        }

        //版本不一致需要更新状态
        if (lcABVerdata.version != sevABVerdata.AssetbundleVersion)
        {
            checkstate = 2;
        }

        //场景版本没有更新,检测资源
        if (checkstate == 0)
        {
            LocalABVersion lcResABVerdata = CCsvDataManager.Instance.LocalABVerDataMgr.GetLocalABVersion(gamedata.ResourceABName);
            //本地资源管理表中没有数据说明上次下载出错了,那么重新下
            if (lcResABVerdata == null)
            {
                checkstate = 1;
                return(checkstate);
            }

            CServerABVerData SerResABVerdata = CCsvDataManager.Instance.SerABVerDataMgr.GetServerABVerData(gamedata.ResourceABName);
            //服务器资源管理表中没有数据
            if (SerResABVerdata == null)
            {
                checkstate = 2;
                return(checkstate);
            }

            //版本不一致需要更新状态
            if (lcResABVerdata.version != SerResABVerdata.AssetbundleVersion)
            {
                checkstate = 2;
            }
        }


        return(checkstate);
    }