Supermodel/Src/Network/UDPPacket.h

82 lines
1.2 KiB
C
Raw Normal View History

#ifndef _UDP_H_
#define _UDP_H_
namespace SMUDP
{
struct Packet
{
2018-01-03 16:19:10 +00:00
static const UINT32 BUFFER_SIZE_UDP = 1460;
UINT32 crc;
UINT16 currentID;
UINT16 totalIDs;
UINT16 flags;
UINT16 length;
2018-01-03 16:19:10 +00:00
UCHAR data[BUFFER_SIZE_UDP];
Packet() {
Init();
}
enum class PacketFlags {
newConnection = (1 << 0),
resend = (1 << 1),
ping = (1 << 2)
};
void Init() {
crc = 0;
currentID = 0;
totalIDs = 0;
flags = 0;
length = 0;
}
UINT32 CalcCRC() {
crc = CalcCRCVal();
}
UINT32 CalcCRCVal() {
UINT32 val = 0;
for (int i = 0; i < _countof(data); i++) {
val += data[i]; // crude but will catch the odd off by one error
}
return val;
}
bool ValidateCRC() {
return CalcCRCVal() == crc;
}
void CreatePacket(PacketFlags p) {
flags |= (UINT16)p;
}
void CalcTotalIDs(int bytes) {
totalIDs = bytes / sizeof(data);
if (bytes % sizeof(data)) {
totalIDs++;
}
}
int HeaderSize() {
return 12;
}
int Size() {
return HeaderSize() + length;
}
operator char*() { return (char*)this; }
operator const char*() { return (char*)this; }
};
typedef char PacketReply;
}
#endif