Example #1
0
        public HttpStatusCode Download(int ModelId, string strDownloadPath, onProgress _onProgress)
        {
            if (!Directory.Exists(Path.GetDirectoryName(strDownloadPath)))
            {
                return(HttpStatusCode.BadRequest);
            }

            Model  file         = this.Get(ModelId);
            int    filesize     = Convert.ToInt32(file.Size);
            string download_url = this.GetDownloadURL(ModelId);

            try
            {
                HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create(download_url);
                Request.Method            = "GET";
                Request.AllowAutoRedirect = true;

                HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();
                using (Stream ResponseStream = Response.GetResponseStream())
                {
                    using (FileStream fs = new FileStream(strDownloadPath, FileMode.OpenOrCreate, FileAccess.Write))
                    {
                        int    current    = 0;
                        float  percentage = 0;
                        int    chunkSize  = 1024 * 1024;
                        byte[] buffer     = new byte[chunkSize];
                        int    BytesRead;
                        while ((BytesRead = ResponseStream.Read(buffer, 0, chunkSize)) > 0)
                        {
                            fs.Write(buffer, 0, BytesRead);
                            current += BytesRead;

                            percentage = (float)(Math.Round((double)current / (double)filesize, 4) * 100);
                            if (_onProgress != null)
                            {
                                _onProgress(percentage);
                            }
                        }
                    }
                }

                return(Response.StatusCode);
            }
            catch (Exception ee)
            {
                throw ee;
            }
        }
Example #2
0
    /// <summary>
    /// 开始热更
    /// </summary>
    public void Go(
        onProgress OnProgress,
        onComplate OnComplate,
        onUpgradeApp OnUpgradeApp,
        onNetError OnNetError
        )
    {
        if (m_CurrContext != null)
        {
            return;                    //正在工作时不允许启动第二个工作协程
        }
        m_CurrContext = new context();

        m_CurrContext.m_State        = STATE.doing;
        m_CurrContext.m_OnProgress   = OnProgress;
        m_CurrContext.m_OnComplate   = OnComplate;
        m_CurrContext.m_OnNetError   = OnNetError;
        m_CurrContext.m_OnUpgradeApp = OnUpgradeApp;
        StartCoroutine(coGo(m_CurrContext));
    }