6
StarHorizon_Public/Content.Shared/Mapping/MappingMapDataMessage.cs
2025-11-12 10:55:00 +03:00

47 lines
1.6 KiB
C#

using System.IO;
using Lidgren.Network;
using Robust.Shared.Network;
using Robust.Shared.Serialization;
using Robust.Shared.Utility;
namespace Content.Shared.Mapping;
public sealed class MappingMapDataMessage : NetMessage
{
public override MsgGroups MsgGroup => MsgGroups.Command;
public override NetDeliveryMethod DeliveryMethod => NetDeliveryMethod.ReliableUnordered;
public ZStdCompressionContext Context = default!;
public string Yml = default!;
public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer)
{
MsgSize = buffer.LengthBytes;
var uncompressedLength = buffer.ReadVariableInt32();
var compressedLength = buffer.ReadVariableInt32();
var stream = new MemoryStream(compressedLength);
buffer.ReadAlignedMemory(stream, compressedLength);
using var decompress = new ZStdDecompressStream(stream);
using var decompressed = new MemoryStream(uncompressedLength);
decompress.CopyTo(decompressed, uncompressedLength);
decompressed.Position = 0;
serializer.DeserializeDirect(decompressed, out Yml);
}
public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serializer)
{
var stream = new MemoryStream();
serializer.SerializeDirect(stream, Yml);
buffer.WriteVariableInt32((int) stream.Length);
stream.Position = 0;
var buf = new byte[ZStd.CompressBound((int) stream.Length)];
var length = Context.Compress2(buf, stream.AsSpan());
buffer.WriteVariableInt32(length);
buffer.Write(buf.AsSpan(0, length));
}
}