12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- // common config struct, instead of passing 10 parameters manually every time.
- using System;
- namespace kcp2k
- {
- // [Serializable] to show it in Unity inspector.
- // 'class' so we can set defaults easily.
- [Serializable]
- public class KcpConfig
- {
- // socket configuration ////////////////////////////////////////////////
- // DualMode uses both IPv6 and IPv4. not all platforms support it.
- // (Nintendo Switch, etc.)
- public bool DualMode;
- // UDP servers use only one socket.
- // maximize buffer to handle as many connections as possible.
- //
- // M1 mac pro:
- // recv buffer default: 786896 (771 KB)
- // send buffer default: 9216 (9 KB)
- // max configurable: ~7 MB
- public int RecvBufferSize;
- public int SendBufferSize;
- // kcp configuration ///////////////////////////////////////////////////
- // configurable MTU in case kcp sits on top of other abstractions like
- // encrypted transports, relays, etc.
- public int Mtu;
- // NoDelay is recommended to reduce latency. This also scales better
- // without buffers getting full.
- public bool NoDelay;
- // KCP internal update interval. 100ms is KCP default, but a lower
- // interval is recommended to minimize latency and to scale to more
- // networked entities.
- public uint Interval;
- // KCP fastresend parameter. Faster resend for the cost of higher
- // bandwidth.
- public int FastResend;
- // KCP congestion window heavily limits messages flushed per update.
- // congestion window may actually be broken in kcp:
- // - sending max sized message @ M1 mac flushes 2-3 messages per update
- // - even with super large send/recv window, it requires thousands of
- // update calls
- // best to leave this disabled, as it may significantly increase latency.
- public bool CongestionWindow;
- // KCP window size can be modified to support higher loads.
- // for example, Mirror Benchmark requires:
- // 128, 128 for 4k monsters
- // 512, 512 for 10k monsters
- // 8192, 8192 for 20k monsters
- public uint SendWindowSize;
- public uint ReceiveWindowSize;
- // timeout in milliseconds
- public int Timeout;
- // maximum retransmission attempts until dead_link
- public uint MaxRetransmits;
- // constructor /////////////////////////////////////////////////////////
- // constructor with defaults for convenience.
- // makes it easy to define "new KcpConfig(DualMode=false)" etc.
- public KcpConfig(
- bool DualMode = true,
- int RecvBufferSize = 1024 * 1024 * 7,
- int SendBufferSize = 1024 * 1024 * 7,
- int Mtu = Kcp.MTU_DEF,
- bool NoDelay = true,
- uint Interval = 10,
- int FastResend = 0,
- bool CongestionWindow = false,
- uint SendWindowSize = Kcp.WND_SND,
- uint ReceiveWindowSize = Kcp.WND_RCV,
- int Timeout = KcpPeer.DEFAULT_TIMEOUT,
- uint MaxRetransmits = Kcp.DEADLINK)
- {
- this.DualMode = DualMode;
- this.RecvBufferSize = RecvBufferSize;
- this.SendBufferSize = SendBufferSize;
- this.Mtu = Mtu;
- this.NoDelay = NoDelay;
- this.Interval = Interval;
- this.FastResend = FastResend;
- this.CongestionWindow = CongestionWindow;
- this.SendWindowSize = SendWindowSize;
- this.ReceiveWindowSize = ReceiveWindowSize;
- this.Timeout = Timeout;
- this.MaxRetransmits = MaxRetransmits;
- }
- }
- }
|