예제 #1
0
    private void Start()
    {
        //前端显示资源路径
        textUrl1.text = "URL1:\n" + url1;

        DownloadMgr.Init();
    }
예제 #2
0
    //启动前,请先调用RegisterRequsetCallback注册回调
    public void StartCheck()
    {
        downloadMgr = DownloadMgr.Instance;

        fileVersionMgr = FileVersionMgr.Instance;

        fileVersionMgr.Init();

        if (HotFixCallback == null)
        {
            Debug.LogError("Null Error is _currentState");
            return;
        }

        clientVersion = new VersionCode();

        serverVersion = new VersionCode();

#if UNIRY_EDITOR
        //编辑器状态,不热更
        Finished();
#else
        ReadLocalVersion();
#endif
    }
예제 #3
0
    private void DownloadOneFile()
    {
        if (DownloadResInfoQueue.Count <= 0)
        {
            //全部下载完成
            SetState(DownloadResState.saveResInfoList2DownloadingFoler);
            return;
        }
        else
        {
            float downloadProgress = (1f - DownloadResInfoQueue.Count / DownloadFileNum) * 0.9f;//下载从0-0.9f
            Messenger.Broadcast <float>("updateLoadingProgress", downloadProgress);
            Debug.LogError("真下载" + downloadProgress);
        }


        string resRelePath = DownloadResInfoQueue.Dequeue();

        Utils.SB.Append(UpdateMgr.RemoteCdnUrl);
        Utils.SB.Append("/");
        Utils.SB.Append(UnityUtil.CurPlatform);
        Utils.SB.Append(resRelePath);
        string remotePath = Utils.SB.ToString();

        Utils.ClearSB();

        Utils.SB.Append(UnityUtil.PersistentPath);
        Utils.SB.Append(DownloadCachePath);
        Utils.SB.Append(resRelePath);
        string savePath       = Utils.SB.ToString();
        string saveFolderPath = FileHelper.GetDirectorName(savePath);

        FileHelper.CreateFolder(saveFolderPath);
        Utils.ClearSB();

        Action onSuccess = () =>
        {
            LogMgr.I("DownloadRes", "DownloadOneFile", "下载资源成功 remotePath:" + remotePath + " savePath:" + savePath, BeShowLog);
            //下载成功后启动下一次下载
            DownloadOneFile();
        };

        Action <string> onFaile = (error) =>
        {
            LogMgr.E("DownloadRes", "DownloadOneFile", "下载流程中断,下载资源失败 remotePath:" + remotePath + " savePath:" + savePath, BeShowLog);
        };

        Action <int> onGetFileSize = (size) =>
        {
        };

        //单个资源的下载进度
        Action <float> onProgress = (progress) =>
        {
        };

        LogMgr.I("DownloadRes", "DelayDown", "开始下载资源 remotePath:" + remotePath + " savePath:" + savePath + " 剩余待下载资源数:" + DownloadResInfoQueue.Count, BeShowLog);

        DownloadMgr.GetIns().StartDownload(remotePath, savePath, onSuccess, onFaile, onGetFileSize, onProgress);
    }
예제 #4
0
 public static DownloadMgr GetInstance()
 {
     if (instance == null)
     {
         instance = new DownloadMgr();
     }
     return(instance);
 }
예제 #5
0
    private void LoadRemoteVersionData()
    {
        DownloadTask _tempTask = new DownloadTask();

        _tempTask.Url = this.m_remoteUrl + m_versionTxtName;

        DownloadMgr.GetInstance().InitDownloadCallBacks(this.ParseRemoteVersionData, this.OneTaskProgressChanged, null);
        DownloadMgr.GetInstance().AsynDownLoadText(_tempTask);
    }
예제 #6
0
    public void TestDownload(string url)
    {
        string[] URLStr   = url1.Split('/');
        string   FileName = URLStr[URLStr.Length - 1];

        string _savePath = Application.dataPath + "/../" + FileName;

        DownloadMgr.GetIns().StartDownload(url, _savePath, OnSuccess, OnFaile, Total, Progress1);
    }
예제 #7
0
        public void UpdateHandler()
        {
            string startProcess = string.Empty;
            string folder       = "HomotorDepotMgr";

            if (D300SysUI.CheckNetworkStatus())
            {
                List <string> fileList = DownloadMgr.GetDownloadFileList(folder);
                if (fileList.Count > 0)
                {
                    //下载更新程序
                    for (int i = 0; i < fileList.Count; i++)
                    {
                        string   curFullName = string.Empty;
                        FileInfo newInfo     = new FileInfo(fileList[i]);
                        if (!newInfo.DirectoryName.Equals("\\"))
                        {
                            if (!Directory.Exists(GlobalShare.stratPath + newInfo.DirectoryName))
                            {
                                Directory.CreateDirectory(GlobalShare.stratPath + newInfo.DirectoryName);
                            }
                        }
                        curFullName = GlobalShare.stratPath + newInfo.FullName;
                        if (Path.GetExtension(curFullName).Equals(".exe"))
                        {
                            startProcess = curFullName;
                        }
                        DownloadMgr.DownloadFile("/" + folder + newInfo.FullName.Replace("\\", "/"), curFullName);
                        int percent = (int)(((i + 1) * 100) / fileList.Count);
                        Console.WriteLine("应用程序已下载{0}%", percent);
                        //this.Invoke(new EventHandler(delegate
                        //{
                        //    progressBar1.Value = percent;
                        //}));
                    }
                    //找到更新程序的exe,并进行更新
                    SetAppProgramConfig();
                    Process.Start(startProcess, "");
                    //关闭当前程序
                    this.Close();
                    this.Dispose();
                    Application.Exit();
                }
                else
                {
                    //msgDialog.ShowMessage("更新失败,没有找到可更新的程序", 1);
                    Console.WriteLine("更新失败,没有找到可更新的程序");
                }
            }
            else
            {
                //msgDialog.ShowMessage("网络没有连接", 1);
                Console.WriteLine("网络没有连接");
            }
        }
예제 #8
0
    public void work()
    {
        DownloadMgr mgr = DownloadMgr.getInstance();

        while (mgr.isActive)
        {
            if (!mgr.trigger())
            {
                Thread.Sleep(3000);
            }
        }
    }
예제 #9
0
 /// <summary>
 /// 资源清理
 /// </summary>
 private void Dispose()
 {
     if (_updateList != null)
     {
         _updateList.Clear();
     }
     //if (_completeList != null)
     //    _completeList.Clear();
     if (_downloadMgr != null)
     {
         _downloadMgr.Dispose();
     }
     _downloadMgr = null;
     _unzipThread = null;
 }
예제 #10
0
        public ResponseListModel <download> GetList(ReqDownEn en)
        {
            var reVal = new ResponseListModel <download>();

            try
            {
                reVal = new DownloadMgr().GetList(en);
            }
            catch (Exception ex)
            {
                reVal.Success = false;
                reVal.Message = ex.Message;
            }
            return(reVal);
        }
예제 #11
0
    /// <summary>
    /// 启动下载
    /// </summary>
    private void StartDownload()
    {
        DownloadMgr.Init();

        //过滤后的待下载资源存储到下载队列中,准备下载
        foreach (var p in DownloadResInfoDic)
        {
            DownloadResInfoQueue.Enqueue(p.Key);
        }

        DownloadFileNum = DownloadResInfoQueue.Count;

        LogMgr.I("DownloadRes", "StartDownload", "启动下载 资源数:" + DownloadFileNum, BeShowLog);

        StartCoroutine("DelayDown");
    }
예제 #12
0
    /// <summary>
    /// 抛给下载器进行下载
    /// </summary>
    private void PushDownloadTask()
    {
        DownloadTask firstTask = this.m_needDownloadTasks.Peek();

        this.m_currTask = firstTask;
        firstTask.Url   = this.m_remoteUrl + firstTask.FileName;

        //设置保存本地的目录
        firstTask.FileName = this.m_localPath + firstTask.FileName;
        string path = Path.GetDirectoryName(firstTask.FileName);

        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }

        DownloadMgr.GetInstance().InitDownloadCallBacks(null, this.OneTaskProgressChanged, this.OneTaskFinished);
        DownloadMgr.GetInstance().AsynDownLoadFile(firstTask);
    }
예제 #13
0
    //所有的下载任务都完成了
    private void AllDownloadTaskFinished(bool updateVersionTxt)
    {
        Debug.Log("All Task Finish");

        if (updateVersionTxt)
        {
            //替换本地的Version.txt为web服务器上的,保持版本最新
            Util.CreateFile(this.m_localPath, m_versionTxtName, this.m_remoteVersionData);
            Debug.Log(m_versionTxtName + "已更新");
        }

        this.m_localVersion      = null;
        this.m_remoteVersion     = null;
        this.m_remoteVersionData = null;

        //释放downloadmgr
        DownloadMgr.GetInstance().Dispose();

        if (m_versionMgrCallback != null)
        {
            this.m_versionMgrCallback();
        }
    }
예제 #14
0
        public IEnumerator IStart(DownloadMgr mgr, string versionName, List <rRes> list, params object[] events)
        {
            mMgr           = mgr;
            mVersionName   = versionName;
            mDownloadList  = list;
            mDownloadCount = 0;

            if (events != null)
            {
                mOnFinish = (Action <object>)events[0];
                mOnUpdate = (Action <object[]>)events[1];
                mOnError  = (Action <object>)events[2];
            }

            if (mTask != null)
            {
                mTask.Shutdown();
            }

            LoadVersion(versionName);

            yield return(CoroutineMgr.Instance.StartCoroutine(mTask, IRun(versionName)));
        }
예제 #15
0
        private void UpdateVersion()
        {
            if (_downloadMgr == null)
            {
                _downloadMgr = new DownloadMgr(FileUtils.LocalTempResRootPath, HotUpdateDefs.kBreakpointTransferInfoFile);
            }
            MainThreadRunner.Instance.StartCoroutine(VersionMgr.Instance.RequestVersionUpdateInfo(_projectManifestUrl,
                                                                                                  (string errorInfo) =>
            {
                //if (RequestRemoteProjectManifestFailedHandler != null)
                //    RequestRemoteProjectManifestFailedHandler(() => { UpdateVersion(); });
                EventCenter.Broadcast <string, Action>((int)HotUpdateEventType.RequestRemoteProjectManifestFail, errorInfo, delegate { UpdateVersion(); });
            },
                                                                                                  () =>
            {
                EventCenter.Broadcast((int)HotUpdateEventType.RequestRemoteProjectManifestSuccess);

                // 检查是否需要更新整包
                if (!VersionMgr.Instance.IsPackageNew)
                {
                    // 下载最新安装包
                    UpdatePackage();
                }
                // 检查是否需要热更(本地主版本号不可能比服务器主版本号大)
                else if (VersionMgr.Instance.IsNeedHotUpdate)
                {
                    // 热更资源
                    UpdateResource();
                }
                else
                {
                    CLogger.Log("GameUpdateMgr::UpdateVersion() - 已经是最新版本,不需要更新.");
                    OnUpdateComplete();     // 版本相同,更新完毕
                }
            }));
        }
예제 #16
0
 public IEnumerator IStart(DownloadMgr mgr, string versionName, params object[] events)
 {
     yield return(CoroutineMgr.Instance.StartCoroutine(IStart(mgr, versionName, null, events)));
 }
예제 #17
0
 public void Start(DownloadMgr mgr, string versionName, params object[] events)
 {
     Start(mgr, versionName, null, events);
 }
예제 #18
0
 public GameUpdateMgr()
 {
     _downloadMgr = new DownloadMgr(FileUtils.LocalTempResRootPath, HotUpdateDefs.kBreakpointTransferInfoFile);
 }
예제 #19
0
 public void StopDownload(string url)
 {
     DownloadMgr.GetIns().StopDownload(url);
 }
예제 #20
0
 public ThreadDownloadBreakPoint(DownloadMgr mgr, DownloadTask task)
 {
     Mgr = mgr;
     Task = task;
 }
예제 #21
0
 void OnDestroy()
 {
     Ins = null;
 }
예제 #22
0
 void Awake()
 {
     Ins = this;
 }
예제 #23
0
 void Awake()
 {
     _instance = this;
 }
 public ThreadDownloadBreakPoint(DownloadMgr mgr, DownloadTask task)
 {
     this.Mgr  = mgr;
     this.Task = task;
 }
예제 #25
0
 public ThreadDownloadBreakPoint(DownloadMgr mgr, DownloadTask task)
 {
     Mgr  = mgr;
     Task = task;
 }
예제 #26
0
 public void Init(DownloadMgr mgr)
 {
     _mgr = mgr;
 }