Пример #1
0
 void ExtractUpk()
 {
     ResetProgress(Status.Extract);
     StartThread(delegate {
         if (File.Exists(_upkPath))
         {
             FingerPrint.StartWriting(_bundleFolder);
             if (UPKExtra.ExtraUPK(_upkPath, _bundleFolder, _progress, true, delegate(string path, byte[] bytes) {
                 FingerPrint.AddItem(path, MiscUtils.GetMd5HashFromBytes(bytes), _bundleFolder);
             }))
             {
                 FingerPrint.Flush();
                 ChangeStatus(Status.Done);
                 File.Delete(_upkPath);
             }
             else
             {
                 Fail();
             }
         }
         else
         {
             ChangeStatus(Status.Request);
         }
     });
 }
Пример #2
0
    private void CheckFingerPrintWithServer(string json)
    {
        string   url      = "Assetbundle/CheckBundle";
        JsonData tempData = new JsonData();

                #if UNITY_ANDROID
        tempData["local_files"]    = json;
        tempData["no_compression"] = "1";
                #else
        tempData["local_files"] = Convert.ToBase64String(GZipUtil.Zip(json));
                #endif

        byte[] Data = System.Text.Encoding.UTF8.GetBytes(tempData.ToJson());
        StaticMonoBehaviour.Instance.StartCoroutine(HttpRequest.Instance.WebRequest(HttpRequest.HttpReqType.POST, url, Data, (string Json) => {
            JsonData tempJson = JsonMapper.ToObject(Json);
            JsonData data     = tempJson["data"];
                        #if UNITY_ANDROID
            string filesUpdate = data ["file_to_update"].ToString();
            string filesDelete = data ["file_to_delete"].ToString();
                        #else
            string filesUpdate = GZipUtil.UnZipToString(Convert.FromBase64String(data["file_to_update"].ToString()));
            string filesDelete = GZipUtil.UnZipToString(Convert.FromBase64String(data["file_to_delete"].ToString()));
            LogManager.Log("file_to_update: " + filesUpdate);
            LogManager.Log("file_to_delete: " + filesDelete);
                        #endif
            FingerPrint.StartWriting(m_AssetBundlePath);
            if (!string.IsNullOrEmpty(filesDelete))
            {
                JsonData jdFilesDelete = JsonMapper.ToObject(filesDelete);
                for (int i = 0; i < jdFilesDelete.Count; ++i)
                {
                    var filePath = m_AssetBundlePath + jdFilesDelete[i].ToString();
                    if (File.Exists(filePath))
                    {
                        File.Delete(filePath);
                    }
                    FingerPrint.DeleteItem(filePath, m_AssetBundlePath);
                }
            }
            FingerPrint.Flush();
            //有需要更新的文件
            if (!string.IsNullOrEmpty(filesUpdate))
            {
                JsonData jdFilesUpdate = JsonMapper.ToObject(filesUpdate);
                string staticServer    = data["static_server"].ToString();
                string platformPath    = data["platform_path"].ToString();
                List <string> paths    = GetPathFromJson(jdFilesUpdate, "");
                if (paths.Count > 0)
                {
                    DownloadFiles(paths, staticServer, platformPath);
                }
                else
                {
                    Ready();
                }
            }
        }, NetworkFail));
    }
Пример #3
0
    public IEnumerator DownloadBundleFile(BundleInfo info)
    {
        WWW www = new WWW(info._url);

        m_CurrentWWW = www;
        yield return(www);

        if (string.IsNullOrEmpty(www.error))
        {
            if (www.responseHeaders.ContainsKey("X-CACHE"))
            {
                LogManager.Log(info._path + ": " + www.responseHeaders["X-CACHE"]);
            }
            try {
                string filePath = m_AssetBundlePath + info._path;
                if (!Directory.Exists(Path.GetDirectoryName(filePath)))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(filePath));
                }
                File.WriteAllBytes(filePath, www.bytes);
                FingerPrint.AddItem(filePath, MiscUtils.GetMd5HashFromBytes(www.bytes), m_AssetBundlePath);
                m_DownloadedNum++;
                m_FinishedBytes += www.bytes.Length;

                www.Dispose();
            } catch (Exception e) {
                LogManager.Log("下载失败:url: " + info._url + ", error: " + e.Message);
                m_FailedBundles.Add(info);
            }
        }
        else
        {
            LogManager.Log("下载失败:url: " + info._url + ", error: " + www.error);
            m_FailedBundles.Add(info);
        }

        m_DownloadIndex++;
        if (m_DownloadIndex == m_WaitForDownloadBundles.Count)
        {
            if (m_FailedBundles.Count > 0)
            {
                LogManager.Log(m_FailedBundles.Count + " files failed! ");
                m_WaitForDownloadBundles.Clear();
                for (int i = 0; i < m_FailedBundles.Count; ++i)
                {
                    m_WaitForDownloadBundles.Add(new BundleInfo()
                    {
                        _url  = m_FailedBundles[i]._url,
                        _path = m_FailedBundles[i]._path
                    });
                }
                m_FailedBundles.Clear();
                m_DownloadIndex = 0;
                StartDownloadAtIndex();
            }
            else
            {
                LogManager.Log("all files completed!!");
                Ready();
                FingerPrint.Flush();
            }
        }
        else
        {
            StartDownloadAtIndex();
        }
        Resources.UnloadUnusedAssets();
    }
Пример #4
0
 void OnDestroy()
 {
     FingerPrint.Flush();
 }