예제 #1
0
        public GameStream(SAGE.Stream.File manifest, SAGE.Big.PackedFile manifestEntry,
                          List <SAGE.Stream.File> manifestFiles, List <SAGE.Big.PackedFile> manifestFileEntries, Dictionary <string, string> versionFiles)
        {
            StreamBases            = new List <SAGE.Stream.File>();
            StreamReferences       = new List <SAGE.Stream.File>();
            StreamBaseEntries      = new List <SAGE.Big.PackedFile>();
            StreamReferenceEntries = new List <SAGE.Big.PackedFile>();
            StreamManifest         = manifest;
            StreamManifestEntry    = manifestEntry;

            foreach (SAGE.Stream.StreamReference reference in StreamManifest.StreamReferences)
            {
                string streamName = reference.Path;
                if (reference.ReferenceType == SAGE.Stream.StreamReferenceType.REFERENCE)
                {
                    string streamNameWithoutExtension = streamName.Substring(0, streamName.LastIndexOf('.'));
                    foreach (KeyValuePair <string, string> version in versionFiles)
                    {
                        if (version.Key.EndsWith(streamNameWithoutExtension))
                        {
                            streamName = streamNameWithoutExtension + version.Value + ".manifest";
                            break;
                        }
                    }
                }
                for (int idx = 0; idx < manifestFileEntries.Count; ++idx)
                {
                    if (manifestFileEntries[idx].Name.ToLowerInvariant().EndsWith(streamName.ToLowerInvariant()))
                    {
                        switch (reference.ReferenceType)
                        {
                        case SAGE.Stream.StreamReferenceType.PATCH:
                            StreamBaseEntries.Add(manifestFileEntries[idx]);
                            StreamBases.Add(manifestFiles[idx]);
                            GetBaseManifest(manifestFiles[idx], manifestFiles, manifestFileEntries);
                            break;

                        case SAGE.Stream.StreamReferenceType.REFERENCE:
                            StreamReferenceEntries.Add(manifestFileEntries[idx]);
                            StreamReferences.Add(manifestFiles[idx]);
                            break;
                        }
                    }
                }
            }
        }
예제 #2
0
 private void GetBaseManifest(SAGE.Stream.File manifest, List <SAGE.Stream.File> manifestFiles, List <SAGE.Big.PackedFile> manifestFileEntries)
 {
     if (manifest.StreamReferences.Count > 0)
     {
         SAGE.Stream.StreamReference reference = manifest.StreamReferences[0];
         if (reference.ReferenceType == SAGE.Stream.StreamReferenceType.PATCH)
         {
             for (int idx = 0; idx < manifestFileEntries.Count; ++idx)
             {
                 if (manifestFileEntries[idx].Name.ToLowerInvariant().EndsWith(reference.Path.ToLowerInvariant()))
                 {
                     StreamBaseEntries.Add(manifestFileEntries[idx]);
                     StreamBases.Add(manifestFiles[idx]);
                     GetBaseManifest(manifestFiles[idx], manifestFiles, manifestFileEntries);
                 }
             }
         }
     }
 }