コード例 #1
0
ファイル: AssetDownloader.cs プロジェクト: zeronely/View
 private IEnumerator DownloadCore()
 {
     yield return 0;
     float progress = 0f;
     float freezeTime = 0f;//用来记录进度没有变化的时长
     WWW www = new WWW(Url);
     while (true)
     {
         yield return 1;// 每一帧进行判定,这样可以合理的判定时间
         if (www.isDone)
         {
             if (www.HasError())
                 SetError(www.error);
             else if (www.size == 0)
                 SetError("Url不存在");
             else
                 SetSucess(www.bytes);
             break;
         }
         else
         {
             if (progress == www.progress)
             {
                 if (progress != 1f)
                 {
                     freezeTime += Time.deltaTime;
                     if (freezeTime > TIMEOUT_TIME)
                     {
                         SetTimeout();
                         break;
                     }
                 }
             }
             else
             {
                 freezeTime = 0f;
                 progress = www.progress;
                 if (OnProgress != null)
                     OnProgress(www.bytesDownloaded);
             }
         }
     }
     www = null;
 }
コード例 #2
0
ファイル: HttpClient.cs プロジェクト: zeronely/View
 /// <summary>
 /// 执行并等待结果
 /// </summary>
 IEnumerator ExecuteAndWaitResponse()
 {
     yield return 0;
     float progress = 0f;
     float freezeTime = 0f;//用来记录进度没有变化的时长
     mWWW = new WWW(mUrl, mPostData, mHeaders);
     while (true)
     {
         yield return 1;// 每一帧进行判定,这样可以合理的判定时间
         if (mWWW.isDone)
         {
             // 出错 || mWWW.bytes.Length != mWWW.bytesDownloaded
             if (mWWW.HasError())
                 Notify(NetState.Error);
             // 成功
             else Notify(NetState.Succeed);
             break;
         }
         else
         {
             if (progress == mWWW.progress)
             {
                 // 即使WWW.progrss =1后还有一小段时间用于内部处理AssetBundle才会isDone=true,所以不用计入超时
                 if (progress != 1f)
                 {
                     freezeTime += Time.deltaTime;//由于是获取Time.deltaTime,所以必须要yield return 1;
                     if (freezeTime > mTimeoutTime)
                     {
                         Notify(NetState.Timeout);
                         // 由于是超时,所以需要进行中断处理
                         // mWWW.Dispose();
                         break;
                     }
                 }
             }
             else
             {
                 freezeTime = 0f;
                 progress = mWWW.progress;
                 // 汇报进度变化
                 Notify(NetState.Progress);
             }
         }
     }
     // WWW结束
     mWWW = null;
     mUrl = null;
     mPostData = null;
     mHeaders = null;
     mTag = null;
     mHandler = null;
 }