예제 #1
0
 public static DownloadMgr GetInst()
 {
     if (inst == null)
     {
         inst = new DownloadMgr();
     }
     return(inst);
 }
예제 #2
0
 public bool UpdateOneRes(string name, Action <string, bool> cb)
 {
     for (int i = 0; i < m_verRes.versionResFile.Count; ++i)
     {
         if (m_verRes.versionResFile[i].name.Equals(name))
         {
             //不用校验了,启动游戏的时候已经全量校验过了
             DownloadMgr.GetInst().CreateTask(m_verRes.versionResFile[i].name, m_verRes.versionResFile[i].signature, cb);
             return(true);
         }
     }
     return(false);
 }
예제 #3
0
        void DoCheck()
        {
            string verFile = PathUtils.GetVaildFullPath("version.json");

            m_verRes = SerializeHelper.LoadFromFile <VersionRes>(verFile);

            //这个大版本要写在程序里,才能保证获取的本地当前版本是对的!!!
            string[] programVersion = VersionResDef.version.Split('.');

            string[] oldVersion  = VersionUpdate.GetIns().GetVersion().Split('.');
            string[] newVersion  = m_verRes.version.Split('.');
            string[] miniVersion = m_verRes.miniVersion.Split('.');

            //强制更新apk,ios
            if (int.Parse(programVersion[0]) < int.Parse(miniVersion[0]) ||
                int.Parse(programVersion[1]) < int.Parse(miniVersion[1])
                )
            {
                if (Application.platform == RuntimePlatform.Android)
                {
                    DownloadMgr.GetInst().CreateTask(m_verRes.apk, m_verRes.apkSignature, DownloadApkResult);
                }
                else if (Application.platform == RuntimePlatform.IPhonePlayer)
                {
                    //todo...
                }
                else
                {
                    //todo...
                }
                return;
            }

            int oldBigVersion = int.Parse(programVersion[0]);
            int newBigVersion = int.Parse(newVersion[0]);

            if (newBigVersion > oldBigVersion)
            {
                //todo...可选更新apk,ios
            }

            VersionUpdate.GetIns().SetVersion(m_verRes);
            m_mgr.ChangeNextStatus();
        }
예제 #4
0
        public override void OnEnter(Status oldStatus)
        {
            LogUtils.Log("enter app channel status");
            verAddrCfg.item.Clear();

            try
            {
                Uri            requestUrl = new Uri("http://10.0.0.252:8080/channel_cfg/channel_ver_addr.json");
                HttpWebRequest request    = (HttpWebRequest)WebRequest.Create(requestUrl);
                request.Timeout = 2000;
                HttpWebResponse respone = (HttpWebResponse)request.GetResponse();

                long   blockSize  = respone.ContentLength;
                byte[] blockBuff  = new byte[blockSize];
                var    respStream = respone.GetResponseStream();
                int    rec        = respStream.Read(blockBuff, 0, (int)blockSize);
                respone.Close();
                request.Abort();

                string str = System.Text.Encoding.Default.GetString(blockBuff);
                verAddrCfg = JsonUtility.FromJson <ChannelVerAddrCfg>(str);

                int channelId = VersionUpdate.GetIns().GetChannelID();
                for (int i = 0; i < verAddrCfg.item.Count; ++i)
                {
                    if (verAddrCfg.item[i].id == channelId)
                    {
                        DownloadMgr.GetInst().SetBaseURL(verAddrCfg.item[i].addr);
                        m_mgr.ChangeNextStatus();
                        return;
                    }
                }
                LogUtils.LogError("can not find channel ver addr!");
            }
            catch (System.Exception ex)
            {
                LogUtils.LogError(ex.ToString());
            }
        }
예제 #5
0
        public override void OnEnter(Status oldStatus)
        {
            LogUtils.Log("enter res file check and update status");

            //check
            VersionRes verRes = VersionUpdate.GetIns().GetVersionRes();

            DownloadMgr.GetInst().SetBaseURL(verRes.url);
            DownloadMgr.GetInst().SetMaxTaskNum(3);

            m_downloadFile.Clear();
            m_downloadSuccFile.Clear();
            for (int i = 0; i < verRes.versionResFile.Count; ++i)
            {
                VersionResFile resFile = verRes.versionResFile[i];

                if (resFile.resType == VersionResType.PreDownload)
                {
                    string fullPath = PathUtils.GetVaildFullPath(resFile.name);
                    if (fullPath.Length == 0 || !FileChecker.VerifyFileSignature(fullPath, resFile.signature))
                    {
                        m_downloadFile.Add(resFile.name);
                        DownloadMgr.GetInst().CreateTask(resFile.name, verRes.versionResFile[i].signature, DownloadResult);
                    }
                }
                else
                {
                    string fileName = PathUtils.GetPersistentPath() + resFile.name;
                    if (fileName.Length > 0 && File.Exists(fileName))
                    {
                        if (!FileChecker.VerifyFileSignature(fileName, resFile.signature))
                        {
                            File.Delete(fileName);
                        }
                    }
                }
            }
            CheckFinish();
        }
예제 #6
0
        public void Init()
        {
            m_statusMgr.RegisterStatus(new AppChannelStatus());
            m_statusMgr.RegisterStatus(new GameVersionStatus());
            m_statusMgr.RegisterStatus(new ResDownloadStatus());
            m_statusMgr.RegisterStatus(new GameStatus());

            DownloadMgr.GetInst().Init();
            m_statusMgr.Init();

            string verFile = PathUtils.GetVaildFullPath("version.json");

            if (verFile.Length > 0)
            {
                m_verRes = SerializeHelper.LoadFromFile <VersionRes>(verFile);
            }

            if (m_verRes == null)
            {
                LogUtils.LogError("verFile can not find!");
                return;
            }
        }
예제 #7
0
 public void Update()
 {
     DownloadMgr.GetInst().Update();
     m_statusMgr.Update();
 }
예제 #8
0
 public void UnInit()
 {
     DownloadMgr.GetInst().Uninit();
     m_statusMgr.Uninit();
 }
예제 #9
0
 public override void OnExit(Status newStatus)
 {
     DownloadMgr.GetInst().StopAllTask();
 }
예제 #10
0
 public override void OnEnter(Status oldStatus)
 {
     LogUtils.Log("enter get version info status");
     //string timeNow = System.DateTime.Now.ToLocalTime().ToString();
     DownloadMgr.GetInst().CreateTask("version.json", "", DownloadResult);
 }