예제 #1
0
        IEnumerable <BlobObject> EnumerateChunksReadObjectsSync(BlobSystem blobSystem,
                                                                bool throwOnUnhandledChunk, IList <KeyValuePair <BlobChunkHeader, byte[]> > chunks)
        {
            var results = new List <BlobObject>(chunks.Count);

            foreach (var kv in chunks)
            {
                var       header = kv.Key;
                BlobGroup blob_group;
                BlobGroupVersionAndBuildInfo info_for_version;
                if (blobSystem.TryGetBlobGroup(header.Signature, header.DataSize, header.Version, out blob_group, out info_for_version))
                {
                    if (!info_for_version.BuildHandle.IsWithinSameBranch(GameTarget.Build))
                    {
                        EnumerateChunksReadObjectFoundBuildIncompatibility(blobSystem, header, blob_group,
                                                                           info_for_version.BuildHandle, GameTarget.Build);
                    }

                    var obj = EnumerateChunksReadObject(blobSystem, blob_group, info_for_version, header, kv.Value);
                    results.Add(obj);
                }
                else
                {
                    EnumerateChunksReadObjectFoundUnknownChunk(blobSystem, header, throwOnUnhandledChunk);
                }
            }

            return(results);
        }
예제 #2
0
        Task <BlobObject>[] EnumerateChunksReadObjectsAsync(BlobSystem blobSystem,
                                                            bool throwOnUnhandledChunk, IList <KeyValuePair <BlobChunkHeader, byte[]> > chunks)
        {
            var task_list = new List <Task <BlobObject> >(chunks.Count);

            foreach (var kv in chunks)
            {
                var       header = kv.Key;
                BlobGroup blob_group;
                BlobGroupVersionAndBuildInfo info_for_version;
                if (blobSystem.TryGetBlobGroup(header.Signature, header.DataSize, header.Version, out blob_group, out info_for_version))
                {
                    if (!info_for_version.BuildHandle.IsWithinSameBranch(GameTarget.Build))
                    {
                        EnumerateChunksReadObjectFoundBuildIncompatibility(blobSystem, header, blob_group,
                                                                           info_for_version.BuildHandle, GameTarget.Build);
                    }

                    var task = Task <BlobObject> .Factory.StartNew(s =>
                                                                   (s as BlobTransportStream).EnumerateChunksReadObject(blobSystem, blob_group, info_for_version, header, kv.Value),
                                                                   this);

                    task_list.Add(task);
                }
                else
                {
                    EnumerateChunksReadObjectFoundUnknownChunk(blobSystem, header, throwOnUnhandledChunk);
                }
            }

            return(task_list.ToArray());
        }