예제 #1
0
 public ContentSystemResponse(ContentManifest manifest, ScenePrereqContentBundlesManifest scenePrereq, bool requiresUpgrade, bool appUpgradeAvailable)
 {
     Manifest            = manifest;
     ScenePrereq         = scenePrereq;
     RequiresUpgrade     = requiresUpgrade;
     AppUpgradeAvailable = appUpgradeAvailable;
 }
        private void scenePrereqBundlesManifest_cacheDownloadedToDisk(ScenePrereqContentBundlesManifest scenePrereqBundlesManifestToCache)
        {
            string path     = Path.Combine(Application.persistentDataPath, "ScenesPrereqBundlesManifest.json");
            string contents = Service.Get <JsonService>().Serialize(scenePrereqBundlesManifestToCache);

            File.WriteAllText(path, contents);
        }
예제 #3
0
        private void onCommandComplete(ContentManifest manifest, ScenePrereqContentBundlesManifest scenePrereqBundlesManifest, bool requiresUpgrade, bool appUpgradeAvailable)
        {
            appService.RequiresUpdate  = requiresUpgrade;
            appService.UpdateAvailable = appUpgradeAvailable;
            string languageString = Service.Get <Localizer>().LanguageString;

            if (!Service.IsSet <Content>())
            {
                contentSystem = new Content(manifest, languageString);
                Service.Set(contentSystem);
                Service.Set(new BundlePrecacheManager(manifest));
                Service.Set(new ScenePrereqContentManager(Service.Get <BundlePrecacheManager>(), scenePrereqBundlesManifest));
                currentContentVersion      = manifest.ContentVersion;
                currentContentManifestHash = manifest.ContentManifestHash;
            }
            else if (Service.Get <INetworkServicesManager>().IsGameServerConnected())
            {
                cachedContentSystemResponse = new ContentSystemResponse(manifest, scenePrereqBundlesManifest, requiresUpgrade, appUpgradeAvailable);
            }
            else if (!requiresUpgrade && (!currentContentVersion.Equals(manifest.ContentVersion) || !currentContentManifestHash.Equals(manifest.ContentManifestHash)))
            {
                if (!currentContentVersion.Equals(manifest.ContentVersion))
                {
                    currentContentVersion = manifest.ContentVersion;
                }
                if (!currentContentManifestHash.Equals(manifest.ContentManifestHash))
                {
                    currentContentManifestHash = manifest.ContentManifestHash;
                }
                contentSystem.UpdateContentManifest(manifest);
                Service.Get <BundlePrecacheManager>().SetManifest(manifest);
                Service.Get <ScenePrereqContentManager>().SetPrereqs(Service.Get <BundlePrecacheManager>(), scenePrereqBundlesManifest);
            }
            lastUpdate = DateTime.Now;
        }
        private IEnumerator contentManifest_download(ContentManifestDirectoryEntry directoryEntry)
        {
            if (directoryEntry == null)
            {
                handleFailure();
                yield break;
            }
            if (string.IsNullOrEmpty(directoryEntry.url))
            {
                handleFailure();
                yield break;
            }
            string contentManifestUrl = directoryEntry.url;
            ICPipeManifestService cpipeManifestService  = Service.Get <ICPipeManifestService>();
            CPipeManifestResponse cpipeManifestResponse = new CPipeManifestResponse();

            yield return(cpipeManifestService.LookupAssetUrl(cpipeManifestResponse, contentManifestUrl));

            UnityWebRequest www = UnityWebRequest.GetAssetBundle(cpipeManifestResponse.FullAssetUrl, 1u, 0u);

            Service.Get <LoadingController>().RegisterDownload(www);
            yield return(www.SendWebRequest());

            Service.Get <LoadingController>().UnRegisterDownload(www);
            AssetBundle contentBundle = ((DownloadHandlerAssetBundle)www.downloadHandler).assetBundle;

            if (www.isNetworkError || contentBundle == null)
            {
                Log.LogErrorFormatted(this, "Failed to download content bundle from CDN: {0}", www.error);
                handleFailure();
                yield break;
            }
            downloadedManifest = ContentHelper.GetContentManifestFromAssetBundle(contentBundle);
            if (downloadedManifest != null)
            {
                checkContentVersionAndManifestHashInManifest(downloadedManifest, directoryEntry);
                contentManifest_cacheDownloadedToDisk(downloadedManifest);
            }
            string[] assetNames = contentBundle.GetAllAssetNames();
            for (int i = 0; i < assetNames.Length; i++)
            {
                string fileName = Path.GetFileName(assetNames[i]);
                if (string.Equals(fileName, "ScenesPrereqBundlesManifest.json", StringComparison.OrdinalIgnoreCase))
                {
                    TextAsset textAsset = contentBundle.LoadAsset <TextAsset>(assetNames[i]);
                    scenePrereqBundlesManifest = Service.Get <JsonService>().Deserialize <ScenePrereqContentBundlesManifest>(textAsset.text);
                    scenePrereqBundlesManifest_cacheDownloadedToDisk(scenePrereqBundlesManifest);
                }
            }
            contentBundle.Unload(unloadAllLoadedObjects: false);
            if (downloadedManifest == null)
            {
                Log.LogError(this, "Content manifest not found in downloaded bundle! Reverting to the embedded manifest");
                handleFailure();
            }
        }
예제 #5
0
        public void SetPrereqs(BundlePrecacheManager bundlePrecacheManager, ScenePrereqContentBundlesManifest scenePrereqBundlesManifest)
        {
            if (bundlePrecacheManager == null)
            {
                throw new ArgumentNullException("bundlePrecacheManager");
            }
            this.bundlePrecacheManager = bundlePrecacheManager;
            if (scenePrereqBundlesManifest == null)
            {
                return;
            }
            ContentManifest manifest = bundlePrecacheManager.GetManifest();

            if (manifest == null)
            {
                throw new ContentManifestException("No Contentmanifest set in BundlePreCacheManager to reference for scene prerequisites.");
            }
            foreach (KeyValuePair <string, string[]> item in scenePrereqBundlesManifest)
            {
                string   key   = item.Key;
                string[] value = item.Value;
                if (value == null)
                {
                    continue;
                }
                List <ContentManifest.BundleEntry> list = new List <ContentManifest.BundleEntry>();
                string[] array = value;
                foreach (string text in array)
                {
                    if (!manifest.BundleEntryMap.ContainsKey(text))
                    {
                        throw new ContentManifestException("Expected bundle key not found in BundleEntryMap for bundleKey=" + text);
                    }
                    list.Add(manifest.BundleEntryMap[text]);
                }
                if (list.Count > 0)
                {
                    scenePrereqBundles.Add(item.Key, list.ToArray());
                }
            }
        }
예제 #6
0
 public ScenePrereqContentManager(BundlePrecacheManager bundlePrecacheManager, ScenePrereqContentBundlesManifest prereqs)
 {
     scenePrereqBundles = new Dictionary <string, ContentManifest.BundleEntry[]>();
     SetPrereqs(bundlePrecacheManager, prereqs);
 }
예제 #7
0
 private void onInitializeManifestCommandComplete(ContentManifest mergedManifest, ScenePrereqContentBundlesManifest scenePrereqBundlesManifest, bool requiresAppUgrade, bool appUpgradeAvailable)
 {
     IntegrationTest.Assert(manifestsAreIdentical(mergedManifest));
     doneWaiting();
 }
예제 #8
0
        private void onInitializeManifestCommandComplete(ContentManifest mergedManifest, ScenePrereqContentBundlesManifest scenePrereqBundlesManifest, bool requiresAppUgrade, bool appUpgradeAvailable)
        {
            string text = ExpectedResult.Validate(mergedManifest, requiresAppUgrade);

            if (!string.IsNullOrEmpty(text))
            {
                Log.LogError(this, text);
                IntegrationTest.Fail(text);
            }
            else
            {
                IntegrationTest.Pass();
                Log.LogErrorFormatted(this, "ReadManifestDirectoryTest: TEST '{0}' SUCCEEDED.", ExpectedResult.TestName);
            }
            doneWaiting();
        }