upm_guru_kcp/Runtime/csharp-kcp/dotNetty-kcp/ChannelConfig.cs

171 lines
4.1 KiB
C#

using base_kcp;
using fec.fec;
namespace dotNetty_kcp
{
public class ChannelConfig
{
private bool nodelay;
private int interval = Kcp.IKCP_INTERVAL;
private int fastresend;
private bool nocwnd;
private int sndwnd = Kcp.IKCP_WND_SND;
private int rcvwnd = Kcp.IKCP_WND_RCV;
private int mtu = Kcp.IKCP_MTU_DEF;
private int minRto = Kcp.IKCP_RTO_MIN;
//超时时间 超过一段时间没收到消息断开连接
private long timeoutMillis;
//TODO 可能有bug还未测试
private bool stream;
//下面为新增参数
private int fecDataShardCount;
private int fecParityShardCount;
//收到包立刻回传ack包
private bool ackNoDelay = false;
//发送包立即调用flush 延迟低一些 cpu增加 如果interval值很小 建议关闭该参数
private bool fastFlush = true;
//crc32校验
private bool crc32Check = false;
//增加ack包回复成功率 填 /8/16/32
private int ackMaskSize = 0;
/**使用conv确定一个channel 还是使用 socketAddress确定一个channel**/
private bool useConvChannel=false;
/**预留长度**/
private int reserved;
public void initNodelay(bool nodelay, int interval, int resend, bool nc){
this.nodelay = nodelay;
this.interval = interval;
this.fastresend = resend;
this.nocwnd=nc;
}
public int Conv { get; set; }
public bool Nodelay
{
get => nodelay;
set => nodelay = value;
}
public int Interval
{
get => interval;
set => interval = value;
}
public int Fastresend
{
get => fastresend;
set => fastresend = value;
}
public bool Nocwnd
{
get => nocwnd;
set => nocwnd = value;
}
public int Sndwnd
{
get => sndwnd;
set => sndwnd = value;
}
public int Rcvwnd
{
get => rcvwnd;
set => rcvwnd = value;
}
public int Mtu
{
get => mtu;
set => mtu = value;
}
public int MinRto
{
get => minRto;
set => minRto = value;
}
public long TimeoutMillis
{
get => timeoutMillis;
set => timeoutMillis = value;
}
public bool Stream
{
get => stream;
set => stream = value;
}
public int FecDataShardCount
{
get => fecDataShardCount;
set
{
if (value > 0)
{
reserved += Fec.fecHeaderSizePlus2;
}
fecDataShardCount = value;
}
}
public int FecParityShardCount
{
get => fecParityShardCount;
set => fecParityShardCount = value;
}
public bool AckNoDelay
{
get => ackNoDelay;
set => ackNoDelay = value;
}
public bool FastFlush
{
get => fastFlush;
set => fastFlush = value;
}
public bool Crc32Check
{
get => crc32Check;
set
{
if (value)
{
reserved += Ukcp.HEADER_CRC;
}
crc32Check = value;
}
}
public int AckMaskSize
{
get => ackMaskSize;
set => ackMaskSize = value;
}
public int Reserved
{
get => reserved;
}
public bool UseConvChannel
{
get => useConvChannel;
set => useConvChannel = value;
}
}
}