| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- 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));
- }
- }
|