mirror of
https://github.com/sebastian-heinz/Arrowgene.DragonsDogmaOnline
synced 2026-08-03 11:12:41 -04:00
50 lines
1.4 KiB
C#
50 lines
1.4 KiB
C#
using System;
|
|
using System.Text;
|
|
using Arrowgene.Buffers;
|
|
using Arrowgene.Logging;
|
|
|
|
namespace Arrowgene.Ddon.Client
|
|
{
|
|
public abstract class ResourceFile : ClientFile
|
|
{
|
|
private static readonly ILogger Logger = LogProvider.Logger<Logger>(typeof(ResourceFile));
|
|
|
|
public string Magic { get; set; }
|
|
|
|
// TODO Magic Validation
|
|
// protected abstract string ExpectedMagic { get; }
|
|
|
|
public override void Read(IBuffer buffer)
|
|
{
|
|
if (buffer.Size < 8)
|
|
{
|
|
Logger.Error($"Not enough data to parse ResourceFile (Size:{buffer.Size} < 8)");
|
|
return;
|
|
}
|
|
|
|
byte[] magicTag = buffer.ReadBytes(4);
|
|
Magic = Encoding.UTF8.GetString(magicTag);
|
|
// TODO Magic Validation
|
|
ReadResource(buffer);
|
|
if (buffer.Position != buffer.Size)
|
|
{
|
|
Logger.Debug(
|
|
$"It looks like there is more data available (Position:{buffer.Position} != Size:{buffer.Size})");
|
|
}
|
|
}
|
|
|
|
public override void Write(IBuffer buffer)
|
|
{
|
|
byte[] magicTag = Encoding.UTF8.GetBytes(Magic);
|
|
buffer.WriteBytes(magicTag);
|
|
WriteResource(buffer);
|
|
}
|
|
|
|
protected abstract void ReadResource(IBuffer buffer);
|
|
|
|
protected virtual void WriteResource(IBuffer buffer)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
}
|