← Back to file list Raw

src/CNetMessagesManager.h

#pragma once
#include "U_Typedefs.h"
#include "CNetMessage.h"
#include "CTime.h"
class CNetMessagesManager
{
public:
CNetMessagesManager();
#pragma pack(push, 1)
struct CPacketHeader
{
packetid_t ID;
crc32_t Checksum;
};
#pragma pack(pop)
#pragma pack(push, 1)
struct CReliableReport
{
netmsgid_t ID;
std::uint16_t Type;
crc32_t Checksum;
};
#pragma pack(pop)
struct CSentMessage
{
netmsgid_t ID;
std::uint16_t Type;
std::shared_ptr<CNetMessage> Message;
crc32_t Checksum;
CTimePoint WriteTime;
size_t SkippedPackets = 0;
size_t Resent = 0;
};
struct CReceivedReliableMessage
{
netmsgid_t ID;
crc32_t Crc;
size_t Size;
std::unique_ptr<CNetMessage> Message;
};
struct CPacket
{
CTimePoint NetTime;
std::vector<std::uint8_t> Buffer;
};
std::vector<CReliableReport> Reports; //reports from received messages
std::vector<CReceivedReliableMessage> ReliablesMessages; //received
std::vector<CReceivedReliableMessage> ResentMessages; //received
std::vector<std::unique_ptr<CNetMessage>> UnreliablesMessages; //received
std::unordered_map<netmsgid_t, CSentMessage> SentMessages; //sent
void ProcessPackets();
void ProcessMessages();
bool ProcessSinglePacket(CPacket& packet);
void AddReceivedPacket(std::vector<std::uint8_t>&& buf, CTimePoint _nettime);
void AddMessage(std::shared_ptr<CNetMessage> msg, bool reliable = true); //to send
void SendReliable(std::shared_ptr<CNetMessage> msg);
void SendUnreliable(std::shared_ptr<CNetMessage> msg);
bool PackSnapshot(std::vector<std::uint8_t>& buf);
std::vector<CPacket> ReceivedQueue; //received
std::vector<std::shared_ptr<CNetMessage>> ReliableQueue; //to send
std::vector<std::shared_ptr<CNetMessage>> UnreliableQueue; //to send
//std::vector<CReliableReport> Reports;
packetid_t PacketID = 0;
netmsgid_t MsgID = 0;
CTimePoint LastPack;
double PackDelay = (1.0 / 33.0); //TODO not hardcoded
size_t UserData = 1488;
};