58 lines
1.9 KiB
C#
58 lines
1.9 KiB
C#
using System;
|
|
|
|
namespace kcp2k
|
|
{
|
|
// header for messages processed by kcp.
|
|
// this is NOT for the raw receive messages(!) because handshake/disconnect
|
|
// need to be sent reliably. it's not enough to have those in rawreceive
|
|
// because those messages might get lost without being resent!
|
|
public enum KcpHeaderReliable : byte
|
|
{
|
|
// don't react on 0x00. might help to filter out random noise.
|
|
Hello = 1,
|
|
// ping goes over reliable & KcpHeader for now. could go over unreliable
|
|
// too. there is no real difference except that this is easier because
|
|
// we already have a KcpHeader for reliable messages.
|
|
// ping is only used to keep it alive, so latency doesn't matter.
|
|
Ping = 2,
|
|
Data = 3,
|
|
}
|
|
|
|
public enum KcpHeaderUnreliable : byte
|
|
{
|
|
// users may send unreliable messages
|
|
Data = 4,
|
|
// disconnect always goes through rapid fire unreliable (glenn fielder)
|
|
Disconnect = 5,
|
|
}
|
|
|
|
// save convert the enums from/to byte.
|
|
// attackers may attempt to send invalid values, so '255' may not convert.
|
|
public static class KcpHeader
|
|
{
|
|
public static bool ParseReliable(byte value, out KcpHeaderReliable header)
|
|
{
|
|
if (Enum.IsDefined(typeof(KcpHeaderReliable), value))
|
|
{
|
|
header = (KcpHeaderReliable)value;
|
|
return true;
|
|
}
|
|
|
|
header = KcpHeaderReliable.Ping; // any default
|
|
return false;
|
|
}
|
|
|
|
public static bool ParseUnreliable(byte value, out KcpHeaderUnreliable header)
|
|
{
|
|
if (Enum.IsDefined(typeof(KcpHeaderUnreliable), value))
|
|
{
|
|
header = (KcpHeaderUnreliable)value;
|
|
return true;
|
|
}
|
|
|
|
header = KcpHeaderUnreliable.Disconnect; // any default
|
|
return false;
|
|
}
|
|
}
|
|
}
|