// 切换资源版本检查状态 private bool SetState(ResVerCheckState newState) { // 如果设置状态与当前状态一致,跳过 if (m_CurState == newState) { return(false); } // 获取旧的状态 ResVerCheckState oldState = m_CurState; // 当游戏流程退出 OnExit(oldState, newState); // 设置新的状态 m_CurState = newState; errormsg = ""; // 当游戏流程进入 OnEnter(newState, oldState); // 打印状态切换日志 Trace.Log("ResVerManager.SetState():" + oldState.ToString() + "->" + newState.ToString()); return(true); }
// 退出旧的状态 private void OnExit(ResVerCheckState oldState, ResVerCheckState newState) { switch (oldState) { case ResVerCheckState.Init: { } break; case ResVerCheckState.Start: { } break; case ResVerCheckState.DownPackCsv: { } break; case ResVerCheckState.DownResCsv: { } break; case ResVerCheckState.ResVerCheck: { oldpackagelist = null; newpackagelist = null; newpackagekeys = null; //enumator=null; } break; case ResVerCheckState.DownResPack: { } break; case ResVerCheckState.Finished: { } break; default: break; } }
// 进入新的状态 private void OnEnter(ResVerCheckState newState, ResVerCheckState oldState) { switch (newState) { case ResVerCheckState.Init: { try { // 用户目录不存在Package目录,创建Package目录 if (!Directory.Exists(ResDef.OuterPackageDirectory)) { Directory.CreateDirectory(ResDef.OuterPackageDirectory); } } catch (Exception e) { } } break; case ResVerCheckState.Start: { m_bStartSucc = true; } break; case ResVerCheckState.DownPackCsv: { // // 判断User下载目录中有没有Local_Package.txt,没有就从Resources目录中拷贝 // if (!File.Exists(ResDef.UserDownLoadDirectory + ResDef.LocalPackageFileName)) // { // TextAsset obj = (TextAsset)AssetSystem.Singleton.LoadFromResources(LoadType.CSVFile, "Scp/Package"); // ResTools.CreateFile(ResDef.LocalPackageFileName, ResDownFlag.PackCsvFile, obj.bytes); // } // 请求下载New包配置文件 uint uReqId = 0; ResDownManager.Instance.ReqDownLoadHandler(out uReqId, -1, ResDownFlag.PackCsvFile, ResDef.ResPackageCommonURL + ResDef.NetPackageFileName, ResDef.NewPackageFileName, this); m_ReqDownInfoDic.Add(uReqId, new ResDownInfo(ResDownState.NoDown, 0)); } break; case ResVerCheckState.DownResCsv: { // 请求下载资源配置文件 uint uReqId = 0; ResDownManager.Instance.ReqDownLoadHandler(out uReqId, -1, ResDownFlag.ResCsvFile, ResDef.ResPackageCommonURL + ResDef.ResourceFileName, ResDef.ResourceFileName, this); m_ReqDownInfoDic.Add(uReqId, new ResDownInfo(ResDownState.NoDown, 0)); } break; case ResVerCheckState.ResVerCheck: { oldpackagelist = new Hashtable(); newpackagelist = new Hashtable(); newpackagekeys = new List <string>(); checkcount = 0; string NewPath = ResDef.OuterPackageDirectory + ResDef.NewPackageFileName; string OldPath = ResDef.OuterPackageDirectory + ResDef.CurrentPackageFileName; if (System.IO.File.Exists(OldPath)) { string pText = System.IO.File.ReadAllText(OldPath); ScpReader scpreader = new ScpReader(pText, "oldpackagecfg"); int n = scpreader.GetRecordCount(); for (int i = 0; i < n; i++) { string packname = scpreader.GetString(i, 1, ""); int ver = scpreader.GetInt(i, 2, 0); long filelength = scpreader.GetLong(i, 3, 0); long datatime = scpreader.GetLong(i, 4, 0); if (packname.Length > 0 && ver > 0 && datatime > 0) { PackageInfo packageinfo = new PackageInfo(); packageinfo.name = packname; packageinfo.ver = ver; packageinfo.filelength = filelength; packageinfo.datatime = datatime; oldpackagelist[packname] = packageinfo; } } Trace.Log("oldpackagelist count=" + oldpackagelist.Count.ToString()); scpreader.Dispose(); } if (System.IO.File.Exists(NewPath)) { string pText = System.IO.File.ReadAllText(NewPath); ScpReader scpreader = new ScpReader(pText, "newpackagecfg"); int n = scpreader.GetRecordCount(); for (int i = 0; i < n; i++) { string packname = scpreader.GetString(i, 1, ""); int ver = scpreader.GetInt(i, 2, 0); long filelength = scpreader.GetLong(i, 3, 0); long datatime = scpreader.GetLong(i, 4, 0); if (packname.Length > 0 && ver > 0 && datatime > 0) { PackageInfo packageinfo = new PackageInfo(); packageinfo.name = packname; packageinfo.ver = ver; packageinfo.filelength = filelength; packageinfo.datatime = datatime; newpackagelist[packname] = packageinfo; newpackagekeys.Add(packname); } } Trace.Log("newpackagelist count=" + newpackagelist.Count.ToString()); Trace.Log("newpackagekeys count=" + newpackagekeys.Count.ToString()); scpreader.Dispose(); } // foreach(DictionaryEntry newkeypair in newpackagelist) // { // string newpackagename=(string)newkeypair.Key; // PackageInfo newpackageinfo=(PackageInfo)newkeypair.Value; // if (oldpackagelist.Contains(newpackagename)) // { // PackageInfo oldpackageinfo=(PackageInfo)oldpackagelist[newpackagename]; // //有更新变化 // if (newpackageinfo.ver>oldpackageinfo.ver || // newpackageinfo.filelength!=oldpackageinfo.filelength|| // newpackageinfo.datatime!=oldpackageinfo.datatime) // { // m_NeedDownPackList.Add(newpackagename); // } // else//无更新变化 // { // string destpath= ResDef.UserPackageDirectory+newpackagename+ext; // //文件不存在,重新下 // if (System.IO.File.Exists(destpath)==false) // { // m_NeedDownPackList.Add(newpackagename); // continue; // } // // //本地文件大小跟配置的不一样,重新下 // FileInfo fi = new FileInfo(destpath); // if (fi.Length!=newpackageinfo.filelength) // { // m_NeedDownPackList.Add(newpackagename); // continue; // } // } // } // // 新增包 // else // { // m_NeedDownPackList.Add(newpackagename); // } // } // 资源版本检查完成 //m_bResVerCheckIsOver = true; } break; case ResVerCheckState.DownResPack: { if (m_NeedDownPackList.Count > 0) { for (int i = 0; i < m_NeedDownPackList.Count; ++i) { // 获取对应的New包配置数据 //PackageData data = m_newPackageCsv.GetCsvValue(m_NeedDownPackList[i]); string packname = m_NeedDownPackList[i] + ext; // 请求下载资源包 uint uReqId = 0; ResDownManager.Instance.ReqDownLoadHandler(out uReqId, -1, ResDownFlag.ResPackage, ResDef.ResPackageCommonURL + packname, packname, this); m_ReqDownInfoDic.Add(uReqId, new ResDownInfo(ResDownState.NoDown, 0)); } // todo开始显示进度条 } } break; case ResVerCheckState.Finished: { // 取消订阅Update事件 //SubscribeUpdateEvent(false); string NewPath = ResDef.OuterPackageDirectory + ResDef.NewPackageFileName; string OldPath = ResDef.OuterPackageDirectory + ResDef.CurrentPackageFileName; //copy new_package.csv as local_package.csv if (File.Exists(NewPath)) { File.Copy(NewPath, OldPath, true); } // 资源版本管理流程结束 bResVerMgrIsOver = true; } break; default: break; } }