Exemple #1
0
    public void DownloadBundleAndLoadScene(string sceneName)
    {
        var item = new BundleCacheItem(ToLoadSceneName.ToLower());

        StartCoroutine(AssetBundleManager.Instance.CheckDownloadBundleFromRemoteServer(item,
                                                                                       () =>
        {
            SceneLoadManager.Instance.LoadScene(ToLoadSceneName);
        },
                                                                                       null,
                                                                                       DownloadingAssetbundle
                                                                                       ));
    }
Exemple #2
0
    protected virtual async Task <IReadOnlyList <string> > GetBundleFilesAsync(BundleConfigurationCollection bundles, string bundleName, IBundler bundler)
    {
        var contributors     = GetContributors(bundles, bundleName);
        var bundleFiles      = RequestResources.TryAdd(await GetBundleFilesAsync(contributors));
        var dynamicResources = RequestResources.TryAdd(await GetDynamicResourcesAsync(contributors));

        if (!IsBundlingEnabled())
        {
            return(bundleFiles.Union(dynamicResources).ToImmutableList());
        }

        var bundleRelativePath =
            Options.BundleFolderName.EnsureEndsWith('/') +
            bundleName + "." + bundleFiles.JoinAsString("|").ToMd5() + "." + bundler.FileExtension;

        var cacheItem = BundleCache.GetOrAdd(bundleRelativePath, () =>
        {
            var cacheValue = new BundleCacheItem(
                new List <string>
            {
                "/" + bundleRelativePath
            }
                );

            WatchChanges(cacheValue, bundleFiles, bundleRelativePath);

            var bundleResult = bundler.Bundle(
                new BundlerContext(
                    bundleRelativePath,
                    bundleFiles,
                    IsMinficationEnabled()
                    )
                );

            SaveBundleResult(bundleRelativePath, bundleResult);

            return(cacheValue);
        });

        return(cacheItem.Files.Union(dynamicResources).ToImmutableList());
    }
Exemple #3
0
    private void WatchChanges(BundleCacheItem cacheValue, List <string> files, string bundleRelativePath)
    {
        lock (cacheValue.WatchDisposeHandles)
        {
            foreach (var file in files)
            {
                var watchDisposeHandle = HostingEnvironment.WebRootFileProvider.Watch(file).RegisterChangeCallback(_ =>
                {
                    lock (cacheValue.WatchDisposeHandles)
                    {
                        cacheValue.WatchDisposeHandles.ForEach(h => h.Dispose());
                        cacheValue.WatchDisposeHandles.Clear();
                    }

                    BundleCache.Remove(bundleRelativePath);
                    DynamicFileProvider.Delete("/wwwroot/" + bundleRelativePath); //TODO: get rid of wwwroot!
                }, null);

                cacheValue.WatchDisposeHandles.Add(watchDisposeHandle);
            }
        }
    }