2024-04-14 19:07:48 +03:00
|
|
|
using Ragon.Protocol;
|
|
|
|
|
|
|
|
|
|
namespace Ragon.Server.Data;
|
|
|
|
|
|
|
|
|
|
public class RagonData
|
|
|
|
|
{
|
2024-05-12 10:57:46 +03:00
|
|
|
private readonly Dictionary<string, byte[]> _data = new Dictionary<string, byte[]>();
|
|
|
|
|
|
|
|
|
|
public bool IsDirty { get; private set; }
|
|
|
|
|
|
|
|
|
|
public RagonData()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-28 20:11:56 +03:00
|
|
|
public void Read(RagonStream buffer)
|
2024-04-14 19:07:48 +03:00
|
|
|
{
|
2024-05-12 10:57:46 +03:00
|
|
|
var len = buffer.ReadUShort();
|
|
|
|
|
for (int i = 0; i < len; i++)
|
2024-04-14 19:07:48 +03:00
|
|
|
{
|
2024-05-12 10:57:46 +03:00
|
|
|
var key = buffer.ReadString();
|
|
|
|
|
var valueSize = buffer.ReadUShort();
|
|
|
|
|
if (valueSize > 0)
|
|
|
|
|
{
|
2024-09-28 20:11:56 +03:00
|
|
|
var value = buffer.ReadBinary(valueSize);
|
2024-05-12 10:57:46 +03:00
|
|
|
_data[key] = value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_data[key] = Array.Empty<byte>();
|
|
|
|
|
}
|
2024-04-14 19:07:48 +03:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-28 20:11:56 +03:00
|
|
|
public void Write(RagonStream buffer)
|
2024-04-14 19:07:48 +03:00
|
|
|
{
|
2024-05-12 10:57:46 +03:00
|
|
|
buffer.WriteUShort((ushort)_data.Count);
|
|
|
|
|
foreach (var prop in _data)
|
|
|
|
|
{
|
|
|
|
|
buffer.WriteString(prop.Key);
|
|
|
|
|
buffer.WriteUShort((ushort)prop.Value.Length);
|
2024-09-28 20:11:56 +03:00
|
|
|
buffer.WriteBinary(prop.Value);
|
2024-05-12 10:57:46 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var toDelete = _data
|
|
|
|
|
.Where(p => p.Value.Length == 0)
|
|
|
|
|
.Select(p => p.Key);
|
2024-11-03 11:36:58 +03:00
|
|
|
|
2024-05-12 10:57:46 +03:00
|
|
|
foreach (var prop in toDelete)
|
|
|
|
|
_data.Remove(prop);
|
|
|
|
|
|
|
|
|
|
IsDirty = false;
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-28 20:11:56 +03:00
|
|
|
public void Snapshot(RagonStream buffer)
|
2024-05-12 10:57:46 +03:00
|
|
|
{
|
|
|
|
|
buffer.WriteUShort((ushort)_data.Count);
|
|
|
|
|
foreach (var prop in _data)
|
|
|
|
|
{
|
|
|
|
|
buffer.WriteString(prop.Key);
|
|
|
|
|
buffer.WriteUShort((ushort)prop.Value.Length);
|
2024-09-28 20:11:56 +03:00
|
|
|
buffer.WriteBinary(prop.Value);
|
2024-05-12 10:57:46 +03:00
|
|
|
|
|
|
|
|
Console.WriteLine($"Key: {prop.Key} Value: {prop.Value.Length}");
|
|
|
|
|
}
|
2024-04-14 19:07:48 +03:00
|
|
|
}
|
|
|
|
|
}
|