コード例 #1
0
 // Token: 0x0600512D RID: 20781 RVA: 0x001BB4F8 File Offset: 0x001B98F8
 private IEnumerator DownloadAndLoadLocalPluginCoroutine(AssetBundleDownload download)
 {
     if (!string.IsNullOrEmpty(download.pluginUrl))
     {
         WWW www = new WWW(download.pluginUrl);
         www.threadPriority = UnityEngine.ThreadPriority.Normal;
         while (!www.isDone)
         {
             yield return(null);
         }
         if (string.IsNullOrEmpty(www.error))
         {
             if (this.CheckForCancellation(download))
             {
                 yield break;
             }
             try
             {
                 PluginManager.Instance.Load(download.pluginUrl, www.bytes);
             }
             catch (Exception ex)
             {
                 download.OnPluginLoadError(ex.Message);
             }
         }
         else
         {
             Debug.LogError("Error loading plugin from " + download.pluginUrl + ": " + www.error);
             download.OnDownloadError("Error loading plugin from " + download.pluginUrl + ": " + www.error, LoadErrorReason.PluginLoadFailed);
         }
     }
     yield break;
 }
コード例 #2
0
 // Token: 0x06005125 RID: 20773 RVA: 0x001BB024 File Offset: 0x001B9424
 private void RetryRequestRemoteAssetBundle(AssetBundleDownload download)
 {
     download.currentState = AssetBundleDownload.State.Error;
     if (false && download.retryCount < 3)
     {
         VRC.Core.Logger.Log("[" + download.downloadId + "] RETRYING DOWNLOAD", DebugLevel.AssetBundleDownloadManager);
         this.mAssetBundleDownloads.Remove(download.assetUrl);
         download.retryCount++;
         base.StartCoroutine(this.DownloadAndUnpackAssetBundleCoroutine(download));
     }
     else
     {
         VRC.Core.Logger.Log("[" + download.downloadId + "] REACHED MAX RETRY COUNT!!", DebugLevel.AssetBundleDownloadManager);
         download.OnDownloadError("[" + download.downloadId + "] Invalid assetbundle url", LoadErrorReason.InvalidURL);
     }
 }
コード例 #3
0
 // Token: 0x06005120 RID: 20768 RVA: 0x001BAED8 File Offset: 0x001B92D8
 private void Unpack(AssetBundleDownload download)
 {
     try
     {
         base.StartCoroutine(this.UnpackAssetBundleCoroutine(download));
     }
     catch (Exception ex)
     {
         VRC.Core.Logger.LogWarning(string.Concat(new object[]
         {
             "[",
             download.downloadId,
             "] Error unpacking ab - ",
             ex.Message
         }), DebugLevel.AssetBundleDownloadManager);
         download.OnDownloadError(ex.Message, LoadErrorReason.Unknown);
     }
 }
コード例 #4
0
 // Token: 0x06005139 RID: 20793 RVA: 0x001BB674 File Offset: 0x001B9A74
 private bool CheckForCancellation(AssetBundleDownload download)
 {
     if (download == null)
     {
         return(false);
     }
     if (download.isCancelled)
     {
         download.Unload();
         this.mAssetBundleDownloads.Remove(download.assetUrl);
         if (download.currentState != AssetBundleDownload.State.Error && download.currentState != AssetBundleDownload.State.Done)
         {
             download.OnDownloadError("Download cancelled!", LoadErrorReason.Cancelled);
         }
         return(true);
     }
     return(false);
 }
コード例 #5
0
    // Token: 0x06005130 RID: 20784 RVA: 0x001BB564 File Offset: 0x001B9964
    private IEnumerator RequestRemoteAssetBundleCoroutine(AssetBundleDownload download)
    {
        bool        error   = false;
        HTTPRequest request = null;

        try
        {
            request            = new HTTPRequest(new Uri(download.assetUrl), null);
            request.OnProgress = new OnDownloadProgressDelegate(download.OnDownloadProgress);
            request.Timeout    = TimeSpan.FromDays(10.0);
            if (download.forceRefreshCache)
            {
                HTTPCacheService.DeleteEntity(request.CurrentUri, true);
            }
            request.Send();
            if (Player.Instance != null && Player.Instance.isInternal)
            {
                Debug.Log(string.Concat(new object[]
                {
                    "[",
                    download.downloadId,
                    "] Sending request : ",
                    Json.Encode(request)
                }));
            }
            download.currentState = AssetBundleDownload.State.HttpRequestSent;
        }
        catch (Exception)
        {
            error = true;
        }
        if (error)
        {
            string message = (request == null) ? "Bad request url." : request.Exception.Message;
            download.OnDownloadError(message, LoadErrorReason.InvalidURL);
        }
        else
        {
            yield return(base.StartCoroutine(request));

            this.OnHttpAssetBundleRequestCompleted(request, request.Response);
        }
        yield break;
    }
コード例 #6
0
    // Token: 0x0600512F RID: 20783 RVA: 0x001BB540 File Offset: 0x001B9940
    private IEnumerator RequestLocalAssetBundleCoroutine(AssetBundleDownload download)
    {
        WWW www = new WWW(download.assetUrl);

        www.threadPriority = UnityEngine.ThreadPriority.Normal;
        while (!www.isDone)
        {
            download.OnDownloadProgress(null, www.bytesDownloaded, www.size);
            yield return(null);
        }
        download.currentState = AssetBundleDownload.State.HttpResponseReceived;
        if (!string.IsNullOrEmpty(www.error) || !this.mAssetBundleDownloads.ContainsKey(www.url))
        {
            download.OnDownloadError(www.error, LoadErrorReason.ConnectionError);
        }
        else
        {
            this.OnLocalAssetBundleRequestCompleted(www);
        }
        yield break;
    }
コード例 #7
0
    // Token: 0x06005131 RID: 20785 RVA: 0x001BB588 File Offset: 0x001B9988
    private IEnumerator WaitForRemoteAssetRequest(AssetBundleDownload download)
    {
        if (download == null)
        {
            yield break;
        }
        if (AssetBundleDownloadManager.Instance == null)
        {
            download.currentState = AssetBundleDownload.State.Error;
            yield break;
        }
        if (AssetBundleDownloadManager.Instance.mAssetBundleDownloads.ContainsKey(download.assetUrl))
        {
            download.currentState = AssetBundleDownload.State.WaitingForDuplicateToBeDone;
            yield return(new WaitWhile(() => AssetBundleDownloadManager.Instance != null && download != null && AssetBundleDownloadManager.Instance.mAssetBundleDownloads.ContainsKey(download.assetUrl) && AssetBundleDownloadManager.Instance.mAssetBundleDownloads[download.assetUrl] != null && AssetBundleDownloadManager.Instance.mAssetBundleDownloads[download.assetUrl].currentState != AssetBundleDownload.State.Done && AssetBundleDownloadManager.Instance.mAssetBundleDownloads[download.assetUrl].currentState != AssetBundleDownload.State.Error));

            if (AssetBundleDownloadManager.Instance == null || download == null || !AssetBundleDownloadManager.Instance.mAssetBundleDownloads.ContainsKey(download.assetUrl) || AssetBundleDownloadManager.Instance.mAssetBundleDownloads[download.assetUrl] == null)
            {
                if (download != null)
                {
                    download.currentState = AssetBundleDownload.State.Error;
                }
                yield break;
            }
            if (AssetBundleDownloadManager.Instance.mAssetBundleDownloads[download.assetUrl].currentState == AssetBundleDownload.State.Done)
            {
                download.asset        = this.GetLoadedAsset(download.assetUrl);
                download.currentState = AssetBundleDownload.State.Done;
                VRC.Core.Logger.Log("[" + download.downloadId + "] Duplicate finished!", DebugLevel.AssetBundleDownloadManager);
            }
            else
            {
                VRC.Core.Logger.Log("[" + download.downloadId + "] Duplicate failed to load because original failed!", DebugLevel.AssetBundleDownloadManager);
                download.OnDownloadError("Duplicate failed to load because original failed!", LoadErrorReason.DuplicateLoadFailed);
            }
        }
        yield break;
    }
コード例 #8
0
    // Token: 0x06005135 RID: 20789 RVA: 0x001BB608 File Offset: 0x001B9A08
    private IEnumerator CreateAsyncCoroutine(AssetBundleDownload download)
    {
        yield return(base.StartCoroutine(this.AttemptLzmaDecompressionCoroutine(download)));

        AssetBundleCreateRequest assetBundleCreateRequest = AssetBundle.LoadFromMemoryAsync(download.assetBundleBytes);

        yield return(assetBundleCreateRequest);

        download.assetBundle = assetBundleCreateRequest.assetBundle;
        if (this.CheckForCancellation(download))
        {
            yield break;
        }
        if (download.assetBundle == null)
        {
            if (!download.forceRefreshCache && !download.assetUrl.StartsWith("file"))
            {
                Debug.LogError(string.Concat(new object[]
                {
                    "[",
                    download.downloadId,
                    "] cached asset bundle was corrupt, redownloading.. - ",
                    download.assetUrl
                }));
                download.forceRefreshCache = true;
                download.currentState      = AssetBundleDownload.State.WaitingForRequestToBeSent;
                this.mAssetBundleDownloads.Remove(download.assetUrl);
                base.StartCoroutine(this.DownloadAndUnpackAssetBundleCoroutine(download));
            }
            else
            {
                download.OnDownloadError("AssetBundle.LoadFromMemoryAsync failed!", LoadErrorReason.AssetBundleCorrupt);
            }
        }
        yield break;
    }
コード例 #9
0
    // Token: 0x06005136 RID: 20790 RVA: 0x001BB62C File Offset: 0x001B9A2C
    private IEnumerator LoadAsyncCoroutine(AssetBundleDownload download)
    {
        if (download.currentState == AssetBundleDownload.State.Error)
        {
            yield break;
        }
        download.currentState = AssetBundleDownload.State.LoadingAssetFromAssetBundle;
        if (download.assetBundle != null)
        {
            string             mainAssetName = AssetBundleDownloadManager.GetMainAssetName(download.assetBundle);
            AssetBundleRequest asyncRequest  = null;
            UnityEngine.Object asset         = null;
            if (string.IsNullOrEmpty(mainAssetName))
            {
                VRC.Core.Logger.Log(string.Concat(new object[]
                {
                    "[",
                    download.downloadId,
                    "] Loading asset ",
                    download.assetUrl,
                    " synchronously."
                }), DebugLevel.AssetBundleDownloadManager);
                asset = download.assetBundle.mainAsset;
            }
            else
            {
                VRC.Core.Logger.Log(string.Concat(new object[]
                {
                    "[",
                    download.downloadId,
                    "] Loading asset ",
                    download.assetUrl,
                    " aynchronously."
                }), DebugLevel.AssetBundleDownloadManager);
                asyncRequest = download.assetBundle.LoadAssetWithSubAssetsAsync(mainAssetName);
                yield return(asyncRequest);

                asset = asyncRequest.asset;
            }
            if (asset != null)
            {
                AssetBundleDownloadManager.Instance.mLoadedAssets[download.assetUrl] = asset;
                download.asset        = asset;
                download.currentState = AssetBundleDownload.State.Done;
            }
            else
            {
                VRC.Core.Logger.Log("[" + download.downloadId + "] Error unpacking asset from asset bundle.", DebugLevel.AssetBundleDownloadManager);
                download.OnDownloadError("Error unpacking asset from asset bundle.", LoadErrorReason.AssetBundleInvalidOrNull);
            }
            VRC.Core.Logger.Log(string.Concat(new object[]
            {
                "[",
                download.downloadId,
                "] UNLOADING ASSET BUNDLE ",
                download.assetUrl
            }), DebugLevel.AssetBundleDownloadManager);
            download.assetBundle.Unload(false);
        }
        else
        {
            VRC.Core.Logger.Log(string.Concat(new object[]
            {
                "[",
                download.downloadId,
                "] Asset bundle for url ",
                download.assetUrl,
                " is invalid (and null)"
            }), DebugLevel.AssetBundleDownloadManager);
            download.OnDownloadError("LoadAsyncCoroutine: Asset bundle is null.", LoadErrorReason.AssetBundleInvalidOrNull);
        }
        yield break;
    }
コード例 #10
0
    // Token: 0x0600512E RID: 20782 RVA: 0x001BB51C File Offset: 0x001B991C
    private IEnumerator DownloadAndLoadRemotePluginCoroutine(AssetBundleDownload download)
    {
        if (Player.Instance != null && Player.Instance.isInternal)
        {
            Debug.Log(string.Concat(new object[]
            {
                "[",
                download.downloadId,
                "] Requires plugin. About to download ",
                download.pluginUrl
            }));
        }
        if (!PluginManager.IsAllowedUrl(download.pluginUrl))
        {
            yield break;
        }
        HTTPRequest pluginReq = null;

        try
        {
            pluginReq = new HTTPRequest(new Uri(download.pluginUrl), null);
        }
        catch (Exception ex)
        {
            download.OnDownloadError("Bad plugin url: " + ex.Message, LoadErrorReason.InvalidURL);
            yield break;
        }
        if (download.forceRefreshCache)
        {
            HTTPCacheService.DeleteEntity(pluginReq.CurrentUri, true);
        }
        pluginReq.OnProgress = new OnDownloadProgressDelegate(download.OnDownloadProgress);
        pluginReq.Send();
        yield return(base.StartCoroutine(pluginReq));

        VRC.Network.ValidateCompletedHTTPRequest(pluginReq, delegate(HTTPResponse response)
        {
            if (!this.CheckForCancellation(download))
            {
                VRC.Core.Logger.Log("[" + download.downloadId + "] Downloaded and loading plugin...", DebugLevel.AssetBundleDownloadManager);
                try
                {
                    PluginManager.Instance.Load(download.pluginUrl, pluginReq.Response.Data);
                }
                catch (Exception ex2)
                {
                    download.OnPluginLoadError(ex2.Message);
                }
            }
        }, delegate(string errorStr)
        {
            string text = "Failed to download plugin from " + download.pluginUrl + " - " + errorStr;
            VRC.Core.Logger.LogError(string.Concat(new object[]
            {
                "[",
                download.downloadId,
                "] ",
                text
            }), DebugLevel.AssetBundleDownloadManager);
            download.OnDownloadError(text, LoadErrorReason.ConnectionError);
        });
        yield break;
    }
コード例 #11
0
    // Token: 0x06005129 RID: 20777 RVA: 0x001BB3F0 File Offset: 0x001B97F0
    private IEnumerator DownloadAndUnpackAssetBundleCoroutine(string url, string assetId, int assetVersion, string pluginUrl, OnDownloadProgressDelegate onProgress, AssetBundleDownloadManager.OnDownloadCompleted onSuccess, AssetBundleDownloadManager.OnDownloadError onError, AssetBundleDownloadManager.UnpackType unpackType, int retryCount = 0, int downloadId = 0, bool forceRefreshCache = false)
    {
        AssetBundleDownload download = new AssetBundleDownload(url, unpackType);

        download.onDownloadCompleted = onSuccess;
        download.onDownloadError     = onError;
        download.onProgress          = onProgress;
        download.retryCount          = retryCount;
        download.forceRefreshCache   = forceRefreshCache;
        download.assetId             = assetId;
        download.assetVersion        = assetVersion;
        download.pluginUrl           = pluginUrl;
        download.onPluginLoadError   = delegate(string message)
        {
            Debug.LogError("Plugin failed to load: " + message);
            if (!download.forceRefreshCache)
            {
                download.forceRefreshCache = true;
                this.StartCoroutine(this.DownloadAndUnpackAssetBundleCoroutine(download));
            }
            else
            {
                download.OnDownloadError("Plugin failed to load: " + message, LoadErrorReason.PluginLoadFailed);
            }
        };
        if (Player.Instance != null && Player.Instance.isInternal)
        {
            Debug.Log(string.Concat(new object[]
            {
                "[",
                download.downloadId,
                "] Downloading asset: '",
                download.assetUrl,
                "'"
            }));
        }
        if (string.IsNullOrEmpty(download.assetUrl))
        {
            download.OnDownloadError("URL is empty", LoadErrorReason.InvalidURL);
            yield break;
        }
        if (downloadId > 0)
        {
            download.downloadId = downloadId;
        }
        bool hasExistingDownload = this.mAssetBundleDownloads.ContainsKey(download.assetUrl);

        if (!hasExistingDownload)
        {
            this.mAssetBundleDownloads[download.assetUrl] = download;
        }
        if (download.assetUrl.StartsWith("file"))
        {
            if (!string.IsNullOrEmpty(download.pluginUrl))
            {
                yield return(this.DownloadAndLoadLocalPlugin(download));
            }
            if (download.currentState == AssetBundleDownload.State.Error)
            {
                yield break;
            }
            if (this.CheckForCancellation(download))
            {
                yield break;
            }
            if (!string.IsNullOrEmpty(download.assetUrl))
            {
                yield return(this.RequestLocalAssetBundle(download, hasExistingDownload));
            }
            yield return(this.WaitForAssetToLoad(download));
        }
        else
        {
            UnityEngine.Object asset = AssetBundleDownloadManager.Instance.GetLoadedAsset(download.assetUrl);
            if (asset == null)
            {
                download.currentState = AssetBundleDownload.State.WaitingForRequestToBeSent;
                if (!string.IsNullOrEmpty(download.pluginUrl) && PluginManager.IsAllowedUrl(download.pluginUrl))
                {
                    yield return(this.DownloadAndLoadRemotePlugin(download));
                }
                else
                {
                    download.pluginUrl = null;
                }
                if (download.currentState == AssetBundleDownload.State.Error)
                {
                    yield break;
                }
                if (this.CheckForCancellation(download))
                {
                    yield break;
                }
                if (!string.IsNullOrEmpty(download.assetUrl))
                {
                    yield return(this.RequestRemoteAssetBundle(download, hasExistingDownload));
                }
                yield return(this.WaitForAssetToLoad(download));
            }
            else
            {
                VRC.Core.Logger.Log(string.Concat(new object[]
                {
                    "[",
                    download.downloadId,
                    "] Asset: ",
                    download.assetUrl,
                    " already loaded."
                }), DebugLevel.AssetBundleDownloadManager);
                download.asset = asset;
                download.OnDownloadCompleted();
            }
        }
        yield break;
    }
コード例 #12
0
    // Token: 0x06005127 RID: 20775 RVA: 0x001BB130 File Offset: 0x001B9530
    private void OnHttpAssetBundleRequestCompleted(HTTPRequest request, HTTPResponse response)
    {
        string originalString = request.Uri.OriginalString;

        if (!this.mAssetBundleDownloads.ContainsKey(originalString))
        {
            return;
        }
        AssetBundleDownload assetBundleDownload = this.mAssetBundleDownloads[originalString];

        if (this.CheckForCancellation(assetBundleDownload))
        {
            return;
        }
        assetBundleDownload.currentState = AssetBundleDownload.State.Error;
        switch (request.State)
        {
        case HTTPRequestStates.Queued:
            VRC.Core.Logger.Log("[" + assetBundleDownload.downloadId + "] Queued request.", DebugLevel.AssetBundleDownloadManager);
            request.Callback = new OnRequestFinishedDelegate(this.OnHttpAssetBundleRequestCompleted);
            return;

        case HTTPRequestStates.Finished:
            if (request.Response.IsSuccess)
            {
                if (Player.Instance != null && Player.Instance.isInternal)
                {
                    Debug.Log(string.Format(string.Concat(new object[]
                    {
                        "[",
                        assetBundleDownload.downloadId,
                        "] AssetBundle [",
                        assetBundleDownload.assetUrl,
                        "] downloaded! Loaded from local cache: {0}, with size: {1}"
                    }), request.Response.IsFromCache.ToString(), response.Data.Length));
                }
                assetBundleDownload.assetBundleBytes = response.Data;
                AssetBundleDownloadManager.Instance.QueueAssetBundleDownload(assetBundleDownload);
                assetBundleDownload.currentState = AssetBundleDownload.State.HttpResponseReceived;
            }
            else
            {
                string message = string.Format(string.Concat(new object[]
                {
                    "[",
                    assetBundleDownload.downloadId,
                    "] Request [",
                    originalString,
                    "] finished Successfully, but the server sent an error. Status Code: {0}-{1} Message: {2}"
                }), request.Response.StatusCode, request.Response.Message, request.Response.DataAsText);
                VRC.Core.Logger.LogError(message, DebugLevel.AssetBundleDownloadManager);
                assetBundleDownload.OnDownloadError(message, LoadErrorReason.ServerReturnedError);
            }
            return;

        case HTTPRequestStates.Error:
            VRC.Core.Logger.Log(string.Concat(new object[]
            {
                "[",
                assetBundleDownload.downloadId,
                "] Request completed with state: ",
                request.State,
                " and message: ",
                request.Exception.Message
            }), DebugLevel.AssetBundleDownloadManager);
            this.RetryRequestRemoteAssetBundle(assetBundleDownload);
            return;

        case HTTPRequestStates.Aborted:
            assetBundleDownload.OnDownloadError("[" + assetBundleDownload.downloadId + "] Download aborted. Server closed the connection.", LoadErrorReason.ConnectionError);
            return;
        }
        assetBundleDownload.OnDownloadError(string.Concat(new object[]
        {
            "[",
            assetBundleDownload.assetUrl,
            "] Error Downloading AssetBundle: ",
            request.State
        }), LoadErrorReason.ConnectionError);
    }