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); }
// 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; }
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; }
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; }
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; }
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)); } } }
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); }