示例#1
0
 void EnumerateChunksReadObjectFoundBuildIncompatibility(BlobSystem blobSystem,
                                                         BlobChunkHeader header, BlobGroup blobGroup,
                                                         Engine.EngineBuildHandle buildForBlobVersion, Engine.EngineBuildHandle actualBuild)
 {
     throw new InvalidOperationException(string.Format(
                                             "Build incompatibility for chunk {0} v{1} sizeof({2}) which uses build={3} " +
                                             "but we're using build={4} for {5}",
                                             blobGroup.GroupTag.TagString, header.Version, header.DataSize, buildForBlobVersion.ToDisplayString(),
                                             actualBuild.ToDisplayString(), UnderlyingStream.StreamName));
 }
示例#2
0
		internal static ContentHeader Create(Engine.EngineBuildHandle gameBuild)
		{
			if (gameBuild.IsWithinSameBranch(Engine.EngineRegistry.EngineBranchHaloReach))
				return new Games.HaloReach.RuntimeData.ContentHeaderHaloReach(gameBuild);

			if (gameBuild.IsWithinSameBranch(Engine.EngineRegistry.EngineBranchHalo4))
				return new Games.Halo4.RuntimeData.ContentHeaderHalo4(gameBuild);

			throw new KSoft.Debug.UnreachableException(gameBuild.ToDisplayString());
		}
示例#3
0
        static Exception SerializeObjectFoundBuildIncompatibility(BlobSystem blobSystem,
                                                                  BlobGroup blobGroup, int version,
                                                                  Engine.EngineBuildHandle buildForBlobVersion, Engine.EngineBuildHandle actualBuild)
        {
            var msg = string.Format(
                "Build incompatibility for blob object {0} v{1} which uses build={2} " +
                "but stream uses build={3}",
                blobGroup.GroupTag.TagString, version, buildForBlobVersion.ToDisplayString(),
                actualBuild.ToDisplayString());

            return(new System.IO.InvalidDataException(msg));
        }
示例#4
0
        public static ContentMiniMetadata Create(Engine.EngineBuildHandle gameBuild)
        {
            if (gameBuild.IsWithinSameBranch(Engine.EngineRegistry.EngineBranchHaloReach))
            {
                return(new Games.HaloReach.RuntimeData.ContentMiniMetadataHaloReach(gameBuild));
            }

            if (gameBuild.IsWithinSameBranch(Engine.EngineRegistry.EngineBranchHalo4))
            {
                return(new Games.Halo4.RuntimeData.ContentMiniMetadataHalo4(gameBuild));
            }

            throw new KSoft.Debug.UnreachableException(gameBuild.ToDisplayString());
        }
示例#5
0
        static async Task <T> GetDatabaseAsync <T>(Engine.EngineBuildHandle forBuild,
                                                   string dbTypeName,
                                                   GetDatabasePathFunc getPathFunc,
                                                   Dictionary <string, T> loadedDbs,
                                                   Func <Engine.EngineBuildHandle, T> ctor)
            where T : class, IO.ITagElementStringNameStreamable
        {
            Contract.Requires/*<ArgumentNullException>*/ (!forBuild.IsNone);
            Contract.Requires(!string.IsNullOrEmpty(dbTypeName));
            Contract.Requires(getPathFunc != null);
            Contract.Requires(loadedDbs != null);

            Engine.EngineBuildHandle actual_build;
            string path = getPathFunc(forBuild, out actual_build);

            if (path == null)
            {
                throw new InvalidOperationException(string.Format(
                                                        "Tried to get the megalo {0} database for {1} when a build file wasn't defined for it",
                                                        dbTypeName,
                                                        forBuild.ToDisplayString()));
            }

            T db;

            lock (loadedDbs)
                loadedDbs.TryGetValue(path, out db);

            if (db == null)
            {
                db = ctor(actual_build);
                lock (loadedDbs)
                    loadedDbs[path] = db;

                await Task.Run(() => LoadDatabase(db, path));
            }

            return(db);
        }