Beispiel #1
0
    public static DownloadHelper StartDownload(string url, string fileSavePath, DelegateDownloadFinish delFun = null, int speed = 0)
    {
        DownloadHelper helper    = new DownloadHelper(url, fileSavePath, delFun, speed);
        Thread         newThread = new Thread(helper.DownloadFile);

        newThread.Start();
        return(helper);
    }
Beispiel #2
0
 // speed 0不限速
 private DownloadHelper(string url, string fileSavePath, DelegateDownloadFinish delFun, int speed)
 {
     m_curUrlArray         = new string[1];
     m_curFilePathArray    = new string[1];
     m_curFilePathArray[0] = fileSavePath;
     m_curUrlArray[0]      = url;
     m_curDelFun           = delFun;
     m_curLimitSizePreUnit = speed * 10 * 1024 / 1000;
     m_bStop = false;
 }
Beispiel #3
0
    private DownloadHelper(List <string> urlList, List <string> fileSavePathList, DelegateDownloadFinish delFun, int speed)
    {
        m_curUrlArray = new string[urlList.Count];
        for (int i = 0; i < urlList.Count; i++)
        {
            m_curUrlArray[i] = urlList[i];
        }

        m_curFilePathArray = new string[fileSavePathList.Count];
        for (int i = 0; i < fileSavePathList.Count; i++)
        {
            m_curFilePathArray[i] = fileSavePathList[i];
        }

        m_curDelFun           = delFun;
        m_curLimitSizePreUnit = speed * 10 * 1024 / 1000;
    }
Beispiel #4
0
    private DownloadHelper(string url, bool bRemote, string fileSavePath, DelegateDownloadFinish delFun)
    {
        m_curUrlArray         = new string[1];
        m_curFilePathArray    = new string[1];
        m_curFilePathArray[0] = fileSavePath;
        if (bRemote)
        {
            m_curUrlArray[0] = DownloadHelper.AddTimestampToUrl(url);
        }
        else
        {
            m_curUrlArray[0] = url;
        }

        m_curDelFun = delFun;
        m_bStop     = false;
    }
Beispiel #5
0
    private DownloadHelper(List <string> urlList, bool bRemote, List <string> fileSavePathList, DelegateDownloadFinish delFun)
    {
        m_curUrlArray = new string[urlList.Count];
        for (int i = 0; i < urlList.Count; i++)
        {
            if (bRemote)
            {
                m_curUrlArray[i] = DownloadHelper.AddTimestampToUrl(urlList[i]);
            }
            else
            {
                m_curUrlArray[i] = urlList[i];
            }
        }

        m_curFilePathArray = new string[fileSavePathList.Count];
        for (int i = 0; i < fileSavePathList.Count; i++)
        {
            m_curFilePathArray[i] = fileSavePathList[i];
        }

        m_curDelFun = delFun;
        m_bStop     = false;
    }
Beispiel #6
0
    public IEnumerator StartUpdateAll(DelegateDownloadFinish delFun)
    {
        UpdateStatus = GetDictionaryText(3300006);
        if (null == mDownloadMd5Dictionary)
        {
            if (delFun != null)
            {
                delFun(false);
            }
            yield break;
        }

        var remoteUrl = "";
        var localUrl  = "";

        {
            TotalCount = mDownloadMd5Dictionary.Count;
            // foreach(var pair in mDownloadMd5Dictionary)
            var __enumerator4 = (mDownloadMd5Dictionary).GetEnumerator();
            while (__enumerator4.MoveNext())
            {
                var pair = __enumerator4.Current;
                {
                    remoteUrl   = CheckUrl(RemoteUrlRoot + "/Resources/" + pair.Key);
                    localUrl    = DownloadRoot + "/" + pair.Key;
                    CurFileSize = int.Parse(pair.Value.Split(',')[1]);
                    wwwCurFile  = new WWW(GameUtils.GetNoCacheUrl(remoteUrl));
                    yield return(wwwCurFile);

                    CurFileSize = 0;
                    CurrentCount++;

                    if (!String.IsNullOrEmpty(wwwCurFile.error))
                    {
                        Logger.Error("download file fail,file name = {0}, error = {1}", remoteUrl, wwwCurFile.error);
                        if (null != delFun)
                        {
                            delFun(false, string.Format(GetDictionaryText(3300015), remoteUrl));
                        }
                        yield break;
                    }
                    try
                    {
                        CheckTargetPath(localUrl);
                        var fs = new FileStream(localUrl, FileMode.Create);
                        fs.Write(wwwCurFile.bytes, 0, wwwCurFile.bytesDownloaded);
                        fs.Close();

                        WriteDllToDisk(pair.Key, wwwCurFile);

                        var md5Hash = GameUtils.GetMd5Hash(localUrl);
                        var md5List = pair.Value.Split(',')[0];
                        if (!md5List.ToLower().Equals(md5Hash.ToLower()))
                        {
                            Logger.Error(
                                "Download file md5 not equal!!! md5 in md5list={0}, compute md5={1},file name = {2}",
                                pair.Value, md5Hash, pair.Key);
                            if (delFun != null)
                            {
                                delFun(false, string.Format(GetDictionaryText(3300015), remoteUrl));
                            }
                            yield break;
                        }

                        //下载完成后写入本地已下载文件列表
                        CheckTargetPath(LocalMd5ListFilePath);

                        var md5Tempfs  = new FileStream(LocalMd5ListFilePath, FileMode.Append, FileAccess.Write);
                        var md5Tempsw  = new StreamWriter(md5Tempfs);
                        var appendText = pair.Key + "," + md5Hash;
                        md5Tempsw.WriteLine(appendText);
                        md5Tempsw.Close();
                        md5Tempfs.Close();
                        mAlreadyDownloadSize += wwwCurFile.bytesDownloaded;

                        wwwCurFile.Dispose();
                        wwwCurFile = null;
                        Logger.Debug("Download file to " + localUrl);
                    }
                    catch (Exception ex)
                    {
                        Logger.Error("download file and write to local error" + ex);
                        if (null != delFun)
                        {
                            delFun(false, string.Format(GetDictionaryText(3300016), localUrl));
                        }
                        yield break;
                    }
                }
            }
        }
        UpdateStatus = GetDictionaryText(3300007);
        //全部完成,删除本地临时md5list,升级本地资源版本号

        try
        {
            if (File.Exists(LocalMd5ListFilePath))
            {
                File.Delete(LocalMd5ListFilePath);
            }
            if (File.Exists(DownLoadVersionPath))
            {
                File.Delete(DownLoadVersionPath);
            }

            CheckTargetPath(DownLoadVersionPath);

            var versionfs = new FileStream(DownLoadVersionPath, FileMode.OpenOrCreate);
            var versionsr = new StreamWriter(versionfs, Encoding.UTF8);
            versionsr.WriteLine(RemoteVersion.ToString());
            versionsr.Close();
            versionfs.Close();
            LocalVersion = RemoteVersion;
            UpdateStatus = string.Empty;
            if (null != delFun)
            {
                if (NeedRestart)
                {
                    delFun(true, GetDictionaryText(200006012));
                }
                else
                {
                    delFun(true);
                }
            }
        }
        catch (Exception ex)
        {
            Logger.Error("Updata finish ,but write version to local exception : ex{0}", ex);
            if (null != delFun)
            {
                delFun(false, GetDictionaryText(3300019));
            }
        }
    }
Beispiel #7
0
    public static DownloadHelper StartDownload(MonoBehaviour monoBehavior, List <string> urlList, bool bRemote, List <string> fileSavePathList, DelegateDownloadFinish delFun = null)
    {
        DownloadHelper helper = new DownloadHelper(urlList, bRemote, fileSavePathList, delFun);

        monoBehavior.StartCoroutine(helper.DownloadFile(monoBehavior));
        return(helper);
    }