private static void CopyFiles(BundleObject bundleobj)
 {
     foreach (BundleObject.copyInfo info in bundleobj.copyinfo)
     {
         string sourthPath = info.sourthPath;
         string destPath   = info.destPath;
         if (sourthPath == string.Empty || destPath == string.Empty)
         {
             continue;
         }
         if (sourthPath == null)
         {
             return;
         }
         string[] files = Directory.GetFiles(sourthPath, info.filePattern, info.searchOption);
         foreach (string filePath in files)
         {
             if (filePath.EndsWith(".meta"))
             {
                 continue;
             }
             Directory.CreateDirectory(destPath);
             string newpath = destPath + filePath.Replace(sourthPath, "");
             Directory.CreateDirectory(Path.GetDirectoryName(newpath));
             File.Copy(sourthPath, newpath, true);
         }
     }
 }
    private static List <AssetBundleBuild> GetBundleList(BundleObject bundleobj)
    {
        List <AssetBundleBuild> buildList = new List <AssetBundleBuild>();

        foreach (BundleObject.bundleInfo info in bundleobj.bundleinfo)
        {
            if (string.IsNullOrEmpty(info.bundleName))
            {
                continue; Debug.LogWarning("bundleName is Empty");
            }
            if (info.filePattern == "")
            {
                info.filePattern = "*";
            }
            string[] files = Directory.GetFiles("Assets/" + info.searchPath, info.filePattern, info.searchOption);
            for (int i = 0; i < files.Length; ++i)
            {
                files[i] = files[i].Replace("\\", "/");
            }
            AssetBundleBuild abb = new AssetBundleBuild();
            abb.assetBundleName = info.bundleName;
            abb.assetNames      = files;
            buildList.Add(abb);
        }
        Debug.LogError(buildList.Count);
        return(buildList);
    }
Esempio n. 3
0
        public void Test_RoundTrip()
        {
            ClearAll();

            Ioc.RegisterSingleton <IMvxStringToTypeParser>(new MvxStringToTypeParser());

            var testObject = new BundleObject
            {
                TheBool1   = false,
                TheBool2   = true,
                TheGuid1   = Guid.NewGuid(),
                TheGuid2   = new Guid(123, 10, 444, 1, 2, 3, 4, 5, 6, 7, 8),
                TheInt1    = 123,
                TheInt2    = 456,
                TheString1 = "Hello World",
                TheString2 = null
            };
            var bundle = new MvxBundle();

            bundle.Write(testObject);

            var output = bundle.Read <BundleObject>();

            Assert.AreEqual(testObject, output);
        }
Esempio n. 4
0
        //卸载
        private void UnloadBundleObject(BundleObject mainBundleObj)
        {
            if (mainBundleObj != null)
            {
                string mainBundlePath = mainBundleObj.bundlePath;
                var    dependiencies  = GetBundleDependencies(mainBundlePath);
                foreach (var subBundlePath in dependiencies)
                {
                    if (m_bundlesMap.TryGetValue(subBundlePath, out var subBundleObj))
                    {
                        UnLoad(subBundlePath);
                    }
                }
                mainBundleObj.Release();

                //因为被m_bundlesMap弱引用着,导致无法正确释放
                if (mainBundleObj.RefCount == 1)    //最后一次是m_bundlesMap的引用
                {
                    mainBundleObj.Release();
                }

                if (mainBundleObj.RefCount == 0)
                {
                    m_bundlesMap.Remove(mainBundlePath);
                }
            }
        }
Esempio n. 5
0
        public void Test_WithReloadState()
        {
            _fixture.ClearAll();

            _fixture.Ioc.RegisterSingleton <IMvxStringToTypeParser>(new MvxStringToTypeParser());

            var testThing = new MockTestThing();

            _fixture.Ioc.RegisterSingleton <ITestThing>(testThing);

            var initBundleObject = new BundleObject
            {
                TheBool1   = false,
                TheBool2   = true,
                TheGuid1   = Guid.NewGuid(),
                TheGuid2   = new Guid(123, 10, 444, 1, 2, 3, 4, 5, 6, 7, 8),
                TheInt1    = 123,
                TheInt2    = 456,
                TheString1 = "Hello World",
                TheString2 = null
            };
            var initBundle = new MvxBundle();

            initBundle.Write(initBundleObject);

            var reloadBundleObject = new BundleObject
            {
                TheBool1   = true,
                TheBool2   = true,
                TheGuid1   = Guid.NewGuid(),
                TheGuid2   = new Guid(1123, 10, 444, 1, 2, 3, 4, 5, 6, 7, 8),
                TheInt1    = 1234,
                TheInt2    = 4567,
                TheString1 = "Foo Bar",
                TheString2 = null
            };
            var reloadBundle = new MvxBundle();

            reloadBundle.Write(reloadBundleObject);

            var           toTest    = new MvxDefaultViewModelLocator();
            var           args      = new MvxNavigateEventArgs(NavigationMode.Show);
            IMvxViewModel viewModel = toTest.Load(typeof(Test1ViewModel), initBundle, reloadBundle, args);

            Assert.NotNull(viewModel);
            var typedViewModel = (Test1ViewModel)viewModel;

            Assert.Equal(initBundle, typedViewModel.BundleInit);
            Assert.Equal(reloadBundle, typedViewModel.BundleState);
            Assert.Equal(testThing, typedViewModel.Thing);
            Assert.Equal(initBundleObject, typedViewModel.TheInitBundleSet);
            Assert.Equal(reloadBundleObject, typedViewModel.TheReloadBundleSet);
            Assert.Equal(initBundleObject.TheGuid1, typedViewModel.TheInitGuid1Set);
            Assert.Equal(initBundleObject.TheGuid2, typedViewModel.TheInitGuid2Set);
            Assert.Equal(initBundleObject.TheString1, typedViewModel.TheInitString1Set);
            Assert.Equal(reloadBundleObject.TheGuid1, typedViewModel.TheReloadGuid1Set);
            Assert.Equal(reloadBundleObject.TheGuid2, typedViewModel.TheReloadGuid2Set);
            Assert.Equal(reloadBundleObject.TheString1, typedViewModel.TheReloadString1Set);
            Assert.True(typedViewModel.StartCalled);
        }
        public void Test_WithReloadState()
        {
            ClearAll();

            var testThing = new MockTestThing();

            Ioc.RegisterSingleton <ITestThing>(testThing);

            var initBundleObject = new BundleObject
            {
                TheBool1   = false,
                TheBool2   = true,
                TheGuid1   = Guid.NewGuid(),
                TheGuid2   = new Guid(123, 10, 444, 1, 2, 3, 4, 5, 6, 7, 8),
                TheInt1    = 123,
                TheInt2    = 456,
                TheString1 = "Hello World",
                TheString2 = null
            };
            var initBundle = new MvxBundle();

            initBundle.Write(initBundleObject);

            var reloadBundleObject = new BundleObject
            {
                TheBool1   = true,
                TheBool2   = true,
                TheGuid1   = Guid.NewGuid(),
                TheGuid2   = new Guid(1123, 10, 444, 1, 2, 3, 4, 5, 6, 7, 8),
                TheInt1    = 1234,
                TheInt2    = 4567,
                TheString1 = "Foo Bar",
                TheString2 = null
            };
            var reloadBundle = new MvxBundle();

            reloadBundle.Write(reloadBundleObject);

            var           toTest = new MvxDefaultViewModelLocator();
            IMvxViewModel viewModel;
            var           result = toTest.TryLoad(typeof(Test1ViewModel), initBundle, reloadBundle, out viewModel);

            Assert.IsTrue(result);
            var typedViewModel = (Test1ViewModel)viewModel;

            Assert.AreSame(initBundle, typedViewModel.BundleInit);
            Assert.AreSame(reloadBundle, typedViewModel.BundleState);
            Assert.AreSame(testThing, typedViewModel.Thing);
            Assert.AreEqual(initBundleObject, typedViewModel.TheInitBundleSet);
            Assert.AreEqual(reloadBundleObject, typedViewModel.TheReloadBundleSet);
            Assert.AreEqual(initBundleObject.TheGuid1, typedViewModel.TheInitGuid1Set);
            Assert.AreEqual(initBundleObject.TheGuid2, typedViewModel.TheInitGuid2Set);
            Assert.AreEqual(initBundleObject.TheString1, typedViewModel.TheInitString1Set);
            Assert.AreEqual(reloadBundleObject.TheGuid1, typedViewModel.TheReloadGuid1Set);
            Assert.AreEqual(reloadBundleObject.TheGuid2, typedViewModel.TheReloadGuid2Set);
            Assert.AreEqual(reloadBundleObject.TheString1, typedViewModel.TheReloadString1Set);
            Assert.IsTrue(typedViewModel.StartCalled);
        }
Esempio n. 7
0
        private void AddBundleObject(string bundlePath, AssetBundle assetBundle)
        {
            if (!m_bundlesMap.ContainsKey(bundlePath))
            {
                var bundleObject = new BundleObject();
                bundleObject.bundlePath  = bundlePath;
                bundleObject.assetBundle = assetBundle;

                m_bundlesMap.Add(bundlePath, bundleObject);
            }
        }
 public void Read(JsonObject Object)
 {
     JsonObject[] BundleObjects = Object.GetObjectArrayField(nameof(Entries));
     foreach (JsonObject BundleObject in BundleObjects)
     {
         Entry Bundle = new Entry();
         Bundle.Name               = BundleObject.GetStringField(nameof(Bundle.Name));
         Bundle.ObjectKey          = BundleObject.GetStringField(nameof(Bundle.ObjectKey));
         Bundle.Time               = DateTime.Parse(BundleObject.GetStringField(nameof(Bundle.Time)));
         Bundle.CompressedLength   = BundleObject.GetIntegerField(nameof(Bundle.CompressedLength));
         Bundle.UncompressedLength = BundleObject.GetIntegerField(nameof(Bundle.UncompressedLength));
         Entries.Add(Bundle);
     }
 }
Esempio n. 9
0
        public void Test_NoReloadState()
        {
            _fixture.ClearAll();

            _fixture.Ioc.RegisterSingleton <IMvxStringToTypeParser>(new MvxStringToTypeParser());

            var testThing = new MockTestThing();

            _fixture.Ioc.RegisterSingleton <ITestThing>(testThing);

            var testObject = new BundleObject
            {
                TheBool1   = false,
                TheBool2   = true,
                TheGuid1   = Guid.NewGuid(),
                TheGuid2   = new Guid(123, 10, 444, 1, 2, 3, 4, 5, 6, 7, 8),
                TheInt1    = 123,
                TheInt2    = 456,
                TheString1 = "Hello World",
                TheString2 = null
            };
            var bundle = new MvxBundle();

            bundle.Write(testObject);

            var navigationService = _fixture.Ioc.Resolve <IMvxNavigationService>();
            var toTest            = new MvxDefaultViewModelLocator(navigationService);

            IMvxViewModel viewModel = toTest.Load(typeof(Test1ViewModel), bundle, null);

            Assert.NotNull(viewModel);
            var typedViewModel = (Test1ViewModel)viewModel;

            Assert.Equal(bundle, typedViewModel.BundleInit);
            Assert.Null(typedViewModel.BundleState);
            Assert.Equal(testThing, typedViewModel.Thing);
            Assert.Equal(testObject, typedViewModel.TheInitBundleSet);
            Assert.Null(typedViewModel.TheReloadBundleSet);
            Assert.Equal(testObject.TheGuid1, typedViewModel.TheInitGuid1Set);
            Assert.Equal(testObject.TheGuid2, typedViewModel.TheInitGuid2Set);
            Assert.Equal(testObject.TheString1, typedViewModel.TheInitString1Set);
            Assert.Equal(Guid.Empty, typedViewModel.TheReloadGuid1Set);
            Assert.Equal(Guid.Empty, typedViewModel.TheReloadGuid2Set);
            Assert.Null(typedViewModel.TheReloadString1Set);
            Assert.True(typedViewModel.StartCalled);
        }
Esempio n. 10
0
 public static void BuildBundle(BundleObject bundleobj)
 {
     if (bundleobj.forceRebuild && Directory.Exists(bundleobj.outPath))
     {
         Directory.Delete(bundleobj.outPath, true);                                                                //判断要不要重新生成StreamingAssets
     }
     Directory.CreateDirectory(bundleobj.outPath);
     AssetDatabase.Refresh();
     CopyFiles(bundleobj);
     AssetDatabase.Refresh();
     BuildPipeline.BuildAssetBundles(bundleobj.outPath, GetBundleList(bundleobj).ToArray(), BuildAssetBundleOptions.DeterministicAssetBundle, bundleobj.target);
     if (bundleobj.filetxtName != null)
     {
         CreateFileList(bundleobj.outPath, bundleobj.filetxtName);
     }
     AssetDatabase.Refresh();
     Debug.Log("Build Complete");
 }
Esempio n. 11
0
 private IEnumerator CheckAssetBundles(bool offlineMode = false)
 {
     if (this.checkAssetBundleCount == 0)
     {
         Bundle.bundleObjects = new Dictionary <string, BundleObject>();
     }
     Bundle.initialized = false;
     this.checkAssetBundleCount++;
     for (int i = 0; i < this.assetBundles.Count; i++)
     {
         string       bundleId = this.assetBundles[i].assetBundleId;
         BundleObject bo;
         if (Bundle.bundleObjects.ContainsKey(bundleId))
         {
             bo = Bundle.bundleObjects[bundleId];
         }
         else
         {
             bo = new BundleObject(bundleId, "unity3d", this.assetBundles[i].loadAtStart, string.Empty);
         }
         string path = Path.Combine(UnityEngine.Application.streamingAssetsPath, "AssetBundles/" + bo.BundleFileName);
         bo.SetBundleLocation(path);
         if (!Bundle.bundleObjects.ContainsKey(bundleId))
         {
             Bundle.bundleObjects.Add(bundleId, bo);
         }
     }
     foreach (KeyValuePair <string, BundleObject> keyValuePair2 in Bundle.bundleObjects)
     {
         if (keyValuePair2.Value.LoadAtStart)
         {
             string bundleId = keyValuePair2.Key;
             base.StartCoroutine(this.LoadAssetBundle(bundleId, delegate
             {
                 this.BundleLoaded(bundleId);
             }));
         }
     }
     Bundle.checkingBundles = false;
     yield break;
 }
Esempio n. 12
0
        public void Test_FillArguments()
        {
            ClearAll();

            Ioc.RegisterSingleton <IMvxStringToTypeParser>(new MvxStringToTypeParser());

            var testObject = new BundleObject
            {
                TheBool1   = false,
                TheBool2   = true,
                TheGuid1   = Guid.NewGuid(),
                TheGuid2   = new Guid(123, 10, 444, 1, 2, 3, 4, 5, 6, 7, 8),
                TheInt1    = 123,
                TheInt2    = 456,
                TheString1 = "Hello World",
                TheString2 = "Goo"
            };
            var bundle = new MvxBundle();

            bundle.Write(testObject);

            var method = GetType().GetMethod("TestFunction");
            var args   = bundle.CreateArgumentList(method.GetParameters(), "ignored debug text");
            var output = method.Invoke(this, args.ToArray());

            var expected = new BundleObject
            {
                TheBool1   = false,
                TheBool2   = true,
                TheGuid1   = Guid.Empty,
                TheGuid2   = new Guid(123, 10, 444, 1, 2, 3, 4, 5, 6, 7, 8),
                TheInt1    = 0,
                TheInt2    = 456,
                TheString1 = "Hello World",
                TheString2 = null
            };

            Assert.AreEqual(expected, output);
        }
Esempio n. 13
0
    private IEnumerator LoadAssetBundle(string bundleId, Action onFinish)
    {
        if (Bundle.bundleObjects == null || !Bundle.bundleObjects.ContainsKey(bundleId))
        {
            yield break;
        }
        BundleObject bo = Bundle.bundleObjects[bundleId];

        if (bo.IsAssetBundleInMemory)
        {
            if (onFinish != null)
            {
                onFinish();
            }
            yield break;
        }
        string path = bo.BundleLocation;

        if (!string.IsNullOrEmpty(path))
        {
            AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path);
            yield return(request);

            AssetBundle assetBundle = request.assetBundle;
            if (assetBundle != null)
            {
                assetBundle.name = bo.BundleId;
                bo.SetLoadedBundle(assetBundle);
                if (onFinish != null)
                {
                    onFinish();
                }
            }
        }
        yield break;
    }