Exemple #1
0
 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);
     }
 }
Exemple #2
0
    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;
        }
    }