package kcp type Config struct { Mtu uint32 // Maximum transmission unit Tti uint32 UplinkCapacity uint32 DownlinkCapacity uint32 Congestion bool WriteBuffer uint32 ReadBuffer uint32 } func (this *Config) Apply() { effectiveConfig = *this } func (this *Config) GetSendingInFlightSize() uint32 { size := this.UplinkCapacity * 1024 * 1024 / this.Mtu / (1000 / this.Tti) / 2 if size == 0 { size = 8 } return size } func (this *Config) GetSendingWindowSize() uint32 { return this.GetSendingInFlightSize() * 4 } func (this *Config) GetSendingQueueSize() uint32 { return this.WriteBuffer / this.Mtu } func (this *Config) GetReceivingWindowSize() uint32 { size := this.DownlinkCapacity * 1024 * 1024 / this.Mtu / (1000 / this.Tti) / 2 if size == 0 { size = 8 } return size } func (this *Config) GetReceivingQueueSize() uint32 { return this.ReadBuffer / this.Mtu } func DefaultConfig() Config { return Config{ Mtu: 1350, Tti: 20, UplinkCapacity: 5, DownlinkCapacity: 20, Congestion: false, WriteBuffer: 4 * 1024 * 1024, ReadBuffer: 4 * 1024 * 1024, } } var ( effectiveConfig = DefaultConfig() )