171 lines
4.1 KiB
C#
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;
|
|
}
|
|
}
|
|
} |