Example #1
0
 private void OnComplete(int code)
 {
     if (code == 206)
     {
         DownloadSuccess();
     }
     else if (code == 416)
     {
         ///在使用暂停下载的时候有几率会出现此问题
         ///因为是线程下载,在下载完成的瞬间暂停后 会把当前文件重新加入下载队列导致重复下载, 实际上暂停之后的同时或者下一帧这个文件已经下载完毕
         /// 所以临时文件 aaa.mp4.tmp 和 远程 aaa.mp4 的大小一样 只不过没有被移动 在续传的时候会返回一次416
         /// 所以这里判断如果临时文件的md5和远程md5相等 直接判定下载成功 不走下面下载失败流程 否则会删除重新下载
         /// 这里跳过了manifest文件 因为这个文件没有对应的md5字符串,也没有必要做对比,一般都是1k大小 重新下载没毛病
         if (m_currentConfig.fileName.EndsWith(".manifest") == false)
         {
             string fileMd5   = Md5Helper.Md5File(m_currentConfig.localUrl + ".tmp");
             string remoteMd5 = m_md5File.GetRemoteMd5(m_currentConfig.fileName);
             if (fileMd5.Trim() == remoteMd5.Trim())
             {
                 Debug.LogWarning(m_currentConfig.fileName + " 返回了416 但是文件已经下载完毕 不需要重新下载" + fileMd5 + "==" + remoteMd5);
                 DownloadSuccess();
             }
             else
             {
                 Debug.LogWarning(m_currentConfig.fileName + " 返回了416 文件不一样 重新下载" + fileMd5 + "!=" + remoteMd5);
                 DownloadFail(code);
             }
         }
     }
     else
     {
         DownloadFail(code);
     }
     m_currentConfig = new SGameUpdaterDownloadConfig();
     DownloadNext();
 }