private static void OnFinishedHandler(bool isSucess, string error) { if (isSucess) { MainWindow.TxtUpdateInfo.Content = "正在解压,请稍候!"; ZipMgr helper = new ZipMgr(); helper.Decompress(LocalZip, Path.GetDirectoryName(LocalZip), OnFinished); } else { // TODO MainWindow.TxtUpdateInfo.Content = "最新版本客户端下载失败!"; string localVersion = LocalVersionExt.Release.Name.Replace(".zip", ""); Process(LocalPath + "/" + localVersion); } }
void ThreadProc() { string saveFile = tSavePath; string uri = tUrl; HttpWebRequest request = null; //打开网络连接 try { request = (HttpWebRequest)HttpWebRequest.Create(uri); request.Timeout = 10000; request.ReadWriteTimeout = 10000; //HttpWebRequest requestGetCount = (HttpWebRequest)HttpWebRequest.Create(uri); WebResponse response = request.GetResponse(); long countLength = 0; countLength = response.ContentLength; //HttpWebRequest request = null ; //HttpWebRequest requestGetCount =null ; //long countLength = 0; //while (true) //{ // try // { // request = (HttpWebRequest)HttpWebRequest.Create(uri); // requestGetCount = (HttpWebRequest)HttpWebRequest.Create(uri); // countLength = requestGetCount.GetResponse().ContentLength; // }catch(Exception e){ // LogMgr.UnityError(e.ToString()); // if (request!=null ) request.Abort(); // if (requestGetCount != null) requestGetCount.Abort; // Thread.Sleep(200); // continue; // } // break; //} //打开上次下载的文件或新建文件 long lStartPos = 0; FileStream fs; if (File.Exists(saveFile)) { fs = File.OpenWrite(saveFile); lStartPos = fs.Length; if (countLength - lStartPos <= 0) { fs.Close(); request.Abort(); //requestGetCount.Abort(); //tProgress = 1.1f; OnComplete(); return; } fs.Seek(lStartPos, SeekOrigin.Current);//移动文件流中的当前指针 } else { fs = new FileStream(saveFile, FileMode.Create); } if (lStartPos > 0) { request.AddRange((int)lStartPos);//设置Range值 //print(lStartPos); } //向服务器请求,获得服务器回应数据流 Stream ns = response.GetResponseStream(); int len = 1024 * 8; byte[] nbytes = new byte[len]; int nReadSize = 0; nReadSize = ns.Read(nbytes, 0, len); float downloadLength = (float)fs.Length; downloadLength += nReadSize; while (nReadSize > 0) { //CoreEntry.logMgr.ThreadLog("多线程下载 开始:" + TimeUtil.unixTime() ); fs.Write(nbytes, 0, nReadSize); nReadSize = ns.Read(nbytes, 0, len); //t = downloadString + ":" + fs.Length / 1024 + "kb/" + countLength / 1024 + "kb" + "----" + ((double)fs.Length / countLength).ToString () + "%"; downloadLength += nReadSize; //tProgress = downloadLength / countLength; //strProgress = string.Format(@"{0:#.##}KB/{1:#.##}KB", downloadLength / 1024, countLength / 1024); // CoreEntry.logMgr.ThreadLog("多线程下载 结束:" +TimeUtil.unixTime()); } ns.Close(); fs.Flush(); fs.Close(); response.Close(); request.Abort(); //requestGetCount.Abort(); //m_gzQueue.Enqueue(saveFile); string strIn = saveFile; string strOut = saveFile.Substring(0, saveFile.Length - 3); string zipMd5 = Md5Util.GetFileHash(strIn); if (curZipMd5 != zipMd5 || ZipMgr.DecompressFileGz(strIn, strOut) == false) //解压失败,重新下载 { m_md5RetryDownloadTimes++; if (m_md5RetryDownloadTimes > 3) { //print(" 重下了3次,不能在循环了 "); return; } CoreEntry.gLogMgr.ThreadLog("****** 重下:" + saveFile); File.Delete(saveFile); //tProgress = 0; ThreadProc(); } else { string oriMd5 = Md5Util.GetFileHash(strOut); //strOut.LastIndexOf('/') ; //int index = strOut.LastIndexOf('/'); string oriFileName = strOut.Substring(strOut.LastIndexOf('/') + 1); //CoreEntry.gLogMgr.ThreadLog("---oriFileName: 删除:" + strIn); //string oriFileName = curDownloadFile.Substring(0, curDownloadFile.Length - 3); ConfigMgr.Instance.setData(oriFileName, oriMd5); //ConfigMgr.Instance.Flush(); File.Delete(strIn); //tProgress = 1.1f; OnComplete(); } } catch (WebException e) { CoreEntry.gLogMgr.ThreadLog(" 下载进程出错 :" + uri + " \n" + e.ToString()); if (request != null) { request.Abort(); } m_timeoutRetryTimes++; if (m_timeoutRetryTimes > 10) { //(" 重下了3次,不能在循环了 "); return; } ThreadProc(); return; } }