wabbajack/Wabbajack.VirtualFileSystem/IndexedVirtualFile.cs

78 lines
2.2 KiB
C#
Raw Normal View History

using System.Collections.Generic;
2020-07-10 22:59:39 +00:00
using System.IO;
using System.Linq;
2021-01-05 22:09:32 +00:00
using System.Text;
2020-07-10 22:59:39 +00:00
using System.Threading.Tasks;
2020-03-22 15:50:53 +00:00
using Wabbajack.Common;
using Wabbajack.Common.Serialization.Json;
namespace Wabbajack.VirtualFileSystem
{
/// <summary>
/// Response from the Build server for a indexed file
/// </summary>
[JsonName("IndexedVirtualFile")]
public class IndexedVirtualFile
{
2020-03-24 12:21:19 +00:00
public IPath Name { get; set; }
2020-03-22 15:50:53 +00:00
public Hash Hash { get; set; }
public long Size { get; set; }
public List<IndexedVirtualFile> Children { get; set; } = new List<IndexedVirtualFile>();
2020-07-10 22:59:39 +00:00
private void Write(BinaryWriter bw)
{
bw.Write(Name.ToString());
bw.Write((ulong)Hash);
bw.Write(Size);
bw.Write(Children.Count);
foreach (var file in Children)
file.Write(bw);
}
public void Write(Stream s)
{
2021-01-05 22:09:32 +00:00
using var bw = new BinaryWriter(s, Encoding.UTF8, true);
2020-07-10 22:59:39 +00:00
bw.Write(Size);
bw.Write(Children.Count);
foreach (var file in Children)
file.Write(bw);
}
private static IndexedVirtualFile Read(BinaryReader br)
{
var ivf = new IndexedVirtualFile
{
Name = (RelativePath)br.ReadString(),
Hash = Hash.FromULong(br.ReadUInt64()),
Size = br.ReadInt64(),
};
var lst = new List<IndexedVirtualFile>();
2020-07-15 03:04:31 +00:00
ivf.Children = lst;
2020-07-10 22:59:39 +00:00
var count = br.ReadInt32();
for (int x = 0; x < count; x++)
{
lst.Add(Read(br));
}
2020-07-15 03:04:31 +00:00
2020-07-10 22:59:39 +00:00
return ivf;
}
public static IndexedVirtualFile Read(Stream s)
{
using var br = new BinaryReader(s);
var ivf = new IndexedVirtualFile
{
Size = br.ReadInt64(),
};
var lst = new List<IndexedVirtualFile>();
ivf.Children = lst;
var count = br.ReadInt32();
for (int x = 0; x < count; x++)
{
lst.Add(Read(br));
}
return ivf;
}
}
}