// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using osu.Framework.IO.Stores; namespace osu.Game.IO.Archives { public abstract class ArchiveReader : IResourceStore { /// /// Opens a stream for reading a specific file from this archive. /// public abstract Stream GetStream(string name); public IEnumerable GetAvailableResources() => Filenames; public abstract void Dispose(); /// /// The name of this archive (usually the containing filename). /// public readonly string Name; protected ArchiveReader(string name) { Name = name; } public abstract IEnumerable Filenames { get; } public virtual byte[] Get(string name) => GetAsync(name).Result; public async Task GetAsync(string name) { using (Stream input = GetStream(name)) { if (input == null) return null; byte[] buffer = new byte[input.Length]; await input.ReadAsync(buffer, 0, buffer.Length); return buffer; } } public abstract Stream GetUnderlyingStream(); } }