Files
RobustToolbox/Robust.Shared/Network/Messages/Transfer/MsgTransferInit.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

45 lines
1.1 KiB
C#

using Lidgren.Network;
using Robust.Shared.Network.Transfer;
using Robust.Shared.Serialization;
namespace Robust.Shared.Network.Messages.Transfer;
internal sealed class MsgTransferInit : NetMessage
{
public (string EndpointUrl, byte[] Key)? HttpInfo;
public override NetDeliveryMethod DeliveryMethod => NetDeliveryMethod.ReliableOrdered;
public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer)
{
var httpAvailable = buffer.ReadBoolean();
if (!httpAvailable)
{
HttpInfo = null;
return;
}
buffer.SkipPadBits();
var endpoint = buffer.ReadString();
var key = buffer.ReadBytes(TransferImplWebSocket.RandomKeyBytes);
HttpInfo = (endpoint, key);
}
public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serializer)
{
if (HttpInfo is null)
{
buffer.Write(false);
return;
}
buffer.Write(true);
buffer.WritePadBits();
var (ep, key) = HttpInfo.Value;
buffer.Write(ep);
buffer.Write(key);
}
}