Files
RobustToolbox/Robust.Shared/Network/Messages/Transfer/MsgTransferData.cs
Pieter-Jan Briers dc1464b462 High-bandwidth transfer system (#6373)
* WebSocket-based data transfer system

* Move resource downloads/uploads to the new transfer system

Should drastically increase the permitted practical size

* Transfer impl for Lidgren

* Async impl for receive stream

* Use unbounded channel for Lidgren

* Add metrics

* More comments

* Add serverside stream limit to avoid being a DoS vector

* Fix tests

* Oops forgot to actually implement sequence channels in NetMessage

* Doc comment for NetMessage.SequenceChannel

* Release notes
2026-01-19 20:44:44 +01:00

37 lines
1.1 KiB
C#

using System;
using System.Buffers;
using Lidgren.Network;
using Robust.Shared.Network.Transfer;
using Robust.Shared.Serialization;
namespace Robust.Shared.Network.Messages.Transfer;
internal sealed class MsgTransferData : NetMessage
{
internal const NetDeliveryMethod Method = NetDeliveryMethod.ReliableOrdered;
internal const int Channel = SequenceChannels.Transfer;
public override NetDeliveryMethod DeliveryMethod => Method;
public override int SequenceChannel => Channel;
public ArraySegment<byte> Data;
public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer)
{
var length = buffer.ReadVariableInt32();
if (length > BaseTransferImpl.BufferSize)
throw new Exception("Buffer size is too large");
var arr = ArrayPool<byte>.Shared.Rent(length);
buffer.ReadBytes(arr, 0, length);
Data = new ArraySegment<byte>(arr, 0, length);
}
public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serializer)
{
buffer.WriteVariableInt32(Data.Count);
buffer.Write(Data.AsSpan());
}
}