Exemplo n.º 1
0
        public static async Task <BA2FileEntryBuilder> Create(BA2FileEntryState state, Stream src, DiskSlabAllocator slab)
        {
            var builder = new BA2FileEntryBuilder
            {
                _state   = state,
                _rawSize = (int)src.Length,
                _dataSrc = src
            };

            if (!state.Compressed)
            {
                return(builder);
            }

            await using (var ms = new MemoryStream())
            {
                await using (var ds = new DeflaterOutputStream(ms))
                {
                    ds.IsStreamOwner = false;
                    await builder._dataSrc.CopyToAsync(ds);
                }

                builder._dataSrc = slab.Allocate(ms.Length);
                ms.Position      = 0;
                await ms.CopyToAsync(builder._dataSrc);

                builder._dataSrc.Position = 0;
                builder._size             = (int)ms.Length;
            }
            return(builder);
        }
Exemplo n.º 2
0
        public static BA2FileEntryBuilder Create(BA2FileEntryState state, Stream src)
        {
            var builder = new BA2FileEntryBuilder {
                _state = state
            };

            using (var ms = new MemoryStream())
            {
                src.CopyTo(ms);
                builder._data = ms.ToArray();
            }
            builder._rawSize = builder._data.Length;

            if (state.Compressed)
            {
                using (var ms = new MemoryStream())
                {
                    using (var ds = new DeflaterOutputStream(ms))
                    {
                        ds.Write(builder._data, 0, builder._data.Length);
                    }
                    builder._data = ms.ToArray();
                }
                builder._size = builder._data.Length;
            }
            return(builder);
        }
Exemplo n.º 3
0
        public void AddFile(FileStateObject state, Stream src)
        {
            switch (_state.Type)
            {
            case EntryType.GNRL:
                var result = new BA2FileEntryBuilder((BA2FileEntryState)state, src);
                lock (_entries) _entries.Add(result);
                break;

            case EntryType.DX10:
                var resultdx10 = new BA2DX10FileEntryBuilder((BA2DX10EntryState)state, src);
                lock (_entries) _entries.Add(resultdx10);
                break;
            }
        }
Exemplo n.º 4
0
        public async Task AddFile(FileStateObject state, Stream src)
        {
            switch (_state.Type)
            {
            case EntryType.GNRL:
                var result = await BA2FileEntryBuilder.Create((BA2FileEntryState)state, src, _slab);

                lock (_entries) _entries.Add(result);
                break;

            case EntryType.DX10:
                var resultdx10 = await BA2DX10FileEntryBuilder.Create((BA2DX10EntryState)state, src, _slab);

                lock (_entries) _entries.Add(resultdx10);
                break;
            }
        }