47 lines
1.6 KiB
C#
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));
|
|
}
|
|
}
|