mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-02-14 19:29:36 +01:00
* 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
37 lines
1.1 KiB
C#
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());
|
|
}
|
|
}
|