70 lines
3.0 KiB
C#
70 lines
3.0 KiB
C#
using System;
|
|
|
|
namespace ShrinkNetwork
|
|
{
|
|
public sealed class ShrinkKcpTransportOptions
|
|
{
|
|
public uint ConversationId { get; set; }
|
|
public int Mtu { get; set; } = 1200;
|
|
public int SendWindow { get; set; } = 256;
|
|
public int ReceiveWindow { get; set; } = 256;
|
|
public bool NoDelay { get; set; } = true;
|
|
public int Interval { get; set; } = 10;
|
|
public int Resend { get; set; } = 2;
|
|
public bool DisableCongestionControl { get; set; } = true;
|
|
public int UpdateIntervalMs { get; set; } = 10;
|
|
public int ConnectTimeoutMs { get; set; } = 5000;
|
|
public int HandshakeRetryMs { get; set; } = 1000;
|
|
public int IdleTimeoutMs { get; set; } = 15000;
|
|
public int ReceiveBufferSize { get; set; } = 64 * 1024;
|
|
public int MaxMessageSize { get; set; } = 64 * 1024;
|
|
|
|
public void Validate()
|
|
{
|
|
if (Mtu < 576 || Mtu > 1400)
|
|
throw new ArgumentOutOfRangeException(nameof(Mtu), "MTU must be between 576 and 1400.");
|
|
if (SendWindow <= 0)
|
|
throw new ArgumentOutOfRangeException(nameof(SendWindow));
|
|
if (ReceiveWindow <= 0)
|
|
throw new ArgumentOutOfRangeException(nameof(ReceiveWindow));
|
|
if (Interval <= 0 || Interval > 5000)
|
|
throw new ArgumentOutOfRangeException(nameof(Interval));
|
|
if (Resend < 0 || Resend > 2)
|
|
throw new ArgumentOutOfRangeException(nameof(Resend));
|
|
if (UpdateIntervalMs <= 0 || UpdateIntervalMs > 5000)
|
|
throw new ArgumentOutOfRangeException(nameof(UpdateIntervalMs));
|
|
if (ConnectTimeoutMs <= 0)
|
|
throw new ArgumentOutOfRangeException(nameof(ConnectTimeoutMs));
|
|
if (HandshakeRetryMs <= 0)
|
|
throw new ArgumentOutOfRangeException(nameof(HandshakeRetryMs));
|
|
if (IdleTimeoutMs <= 0)
|
|
throw new ArgumentOutOfRangeException(nameof(IdleTimeoutMs));
|
|
if (ReceiveBufferSize <= 0)
|
|
throw new ArgumentOutOfRangeException(nameof(ReceiveBufferSize));
|
|
if (MaxMessageSize <= 0)
|
|
throw new ArgumentOutOfRangeException(nameof(MaxMessageSize));
|
|
}
|
|
|
|
public ShrinkKcpTransportOptions Clone()
|
|
{
|
|
return new ShrinkKcpTransportOptions
|
|
{
|
|
ConversationId = ConversationId,
|
|
Mtu = Mtu,
|
|
SendWindow = SendWindow,
|
|
ReceiveWindow = ReceiveWindow,
|
|
NoDelay = NoDelay,
|
|
Interval = Interval,
|
|
Resend = Resend,
|
|
DisableCongestionControl = DisableCongestionControl,
|
|
UpdateIntervalMs = UpdateIntervalMs,
|
|
ConnectTimeoutMs = ConnectTimeoutMs,
|
|
HandshakeRetryMs = HandshakeRetryMs,
|
|
IdleTimeoutMs = IdleTimeoutMs,
|
|
ReceiveBufferSize = ReceiveBufferSize,
|
|
MaxMessageSize = MaxMessageSize
|
|
};
|
|
}
|
|
}
|
|
}
|