public void loadOneUpdateFile(string path, FileVerInfo fileInfo) { //string loadPath = UtilApi.combineVerPath(path, fileInfo.m_fileMd5); //m_loadingPath.Add(loadPath); m_loadingPath.Add(UtilLogic.webFullPath(path)); if (Ctx.m_instance.m_versionSys.m_localVer.m_path2HashDic.ContainsKey(path)) { UtilApi.delFile(Path.Combine(Ctx.m_instance.m_localFileSys.getLocalWriteDir(), UtilLogic.combineVerPath(path, Ctx.m_instance.m_versionSys.m_localVer.m_path2HashDic[path].m_fileMd5))); // 删除当前目录下已经有的 old 文件 } //UtilApi.delFileNoVer(path); // 删除当前目录下已经有的 old 文件 LoadParam param = Ctx.m_instance.m_poolSys.newObject <LoadParam>(); param.m_path = path; param.m_resLoadType = ResLoadType.eLoadWeb; param.m_version = fileInfo.m_fileMd5; param.m_loadEventHandle = onLoadEventHandle; Ctx.m_instance.m_resLoadMgr.loadData(param); Ctx.m_instance.m_poolSys.deleteObj(param); }
// 协程下载 protected IEnumerator coroutWebDown() { string uri = UtilLogic.webFullPath(m_path); string saveFile = Path.Combine(Ctx.m_instance.m_localFileSys.getLocalWriteDir(), m_path); //try { //打开网络连接 HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); long contentLength = response.ContentLength; long readedLength = 0; long lStartPos = 0; FileStream fileStream; if (File.Exists(saveFile)) { fileStream = System.IO.File.OpenWrite(saveFile); lStartPos = fileStream.Length; if (contentLength - lStartPos <= 0) // 文件已经完成 { fileStream.Close(); yield break; } fileStream.Seek(lStartPos, SeekOrigin.Current); //移动文件流中的当前指针 } else { fileStream = new FileStream(saveFile, System.IO.FileMode.Create); } if (lStartPos > 0) { request.AddRange((int)lStartPos); //设置Range值 contentLength -= lStartPos; } //向服务器请求,获得服务器回应数据流 System.IO.Stream retStream = response.GetResponseStream(); int len = 1024 * 8; m_bytes = new byte[len]; int nReadSize = 0; string logStr; while (readedLength != contentLength) { nReadSize = retStream.Read(m_bytes, 0, len); fileStream.Write(m_bytes, 0, nReadSize); readedLength += nReadSize; logStr = "已下载:" + fileStream.Length / 1024 + "kb /" + contentLength / 1024 + "kb"; Ctx.m_instance.m_logSys.log(logStr); yield return(false); } retStream.Close(); fileStream.Close(); if (readedLength == contentLength) { nonRefCountResLoadResultNotify.resLoadState.setSuccessLoaded(); } else { nonRefCountResLoadResultNotify.resLoadState.setFailed(); } nonRefCountResLoadResultNotify.loadResEventDispatch.dispatchEvent(this); } //catch (Exception) //{ // if (onFailed != null) // { // onFailed(this); // } //} }