1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- using System;
- namespace IFramework.Net.KCP
- {
- class KcpTool
- {
- public const int IKCP_RTO_NDL = 30; // no delay min rto
- public const int IKCP_RTO_MIN = 100; // normal min rto
- public const int IKCP_RTO_DEF = 200;
- public const int IKCP_RTO_MAX = 60000;
- public const int IKCP_CMD_PUSH = 81; // cmd: push data
- public const int IKCP_CMD_ACK = 82; // cmd: ack
- public const int IKCP_CMD_WASK = 83; // cmd: window probe (ask)
- public const int IKCP_CMD_WINS = 84; // cmd: window size (tell)
- public const int IKCP_ASK_SEND = 1; // need to send IKCP_CMD_WASK
- public const int IKCP_ASK_TELL = 2; // need to send IKCP_CMD_WINS
- public const int IKCP_WND_SND = 32;
- public const int IKCP_WND_RCV = 32;
- //public const int IKCP_MTU_DEF = 1400;
- public const int IKCP_MTU_DEF = 1024;
- public const int IKCP_ACK_FAST = 3;
- public const int IKCP_INTERVAL = 100;
- public const int IKCP_OVERHEAD = 24;
- public const int IKCP_DEADLINK = 20;
- public const int IKCP_THRESH_INIT = 2;
- public const int IKCP_THRESH_MIN = 2;
- public const int IKCP_PROBE_INIT = 7000; // 7 secs to probe window size
- public const int IKCP_PROBE_LIMIT = 120000; // up to 120 secs to probe window
- public const int IKCP_SN_OFFSET = 12;
- // encode 8 bits unsigned int
- public static int Encode(byte[] p, int offset, byte c)
- {
- p[0 + offset] = c;
- return 1;
- }
- // decode 8 bits unsigned int
- public static int Decode(byte[] p, int offset, ref byte c)
- {
- c = p[0 + offset];
- return 1;
- }
- /* encode 16 bits unsigned int (lsb) */
- public static int Encode(byte[] p, int offset, UInt16 w)
- {
- p[0 + offset] = (byte)(w >> 0);
- p[1 + offset] = (byte)(w >> 8);
- return 2;
- }
- /* decode 16 bits unsigned int (lsb) */
- public static int Decode(byte[] p, int offset, ref UInt16 c)
- {
- UInt16 result = 0;
- result |= (UInt16)p[0 + offset];
- result |= (UInt16)(p[1 + offset] << 8);
- c = result;
- return 2;
- }
- /* encode 32 bits unsigned int (lsb) */
- public static int Encode(byte[] p, int offset, UInt32 l)
- {
- p[0 + offset] = (byte)(l >> 0);
- p[1 + offset] = (byte)(l >> 8);
- p[2 + offset] = (byte)(l >> 16);
- p[3 + offset] = (byte)(l >> 24);
- return 4;
- }
- /* decode 32 bits unsigned int (lsb) */
- public static int Decode(byte[] p, int offset, ref UInt32 c)
- {
- UInt32 result = 0;
- result |= (UInt32)p[0 + offset];
- result |= (UInt32)(p[1 + offset] << 8);
- result |= (UInt32)(p[2 + offset] << 16);
- result |= (UInt32)(p[3 + offset] << 24);
- c = result;
- return 4;
- }
- public static UInt32 Min(UInt32 a, UInt32 b) => a <= b ? a : b;
- public static UInt32 Max(UInt32 a, UInt32 b) => a >= b ? a : b;
- public static UInt32 Clamp(UInt32 lower, UInt32 middle, UInt32 upper) => Min(Max(lower, middle), upper);
- public static Int32 Subtract(UInt32 later, UInt32 earlier) => ((Int32)(later - earlier));
- }
- }
|