Пример #1
0
    // 切换资源版本检查状态
    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);
    }
Пример #2
0
    // 退出旧的状态
    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;
        }
    }
Пример #3
0
    // 进入新的状态
    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;
        }
    }