WIP started on reliable messages
This commit is contained in:
@@ -43,6 +43,7 @@ private:
|
||||
PacketID m_PacketID = 0;
|
||||
PacketID m_PreviousPacketID = 0;
|
||||
PacketID m_SendPacketID = 0;
|
||||
AckBitPattern ackBitField = 0;
|
||||
|
||||
// Game logic
|
||||
World* m_World;
|
||||
|
||||
@@ -11,10 +11,12 @@
|
||||
#include "Core/ConfigFile.h"
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <bitset>
|
||||
|
||||
#define INPUTSIZE 4097
|
||||
typedef unsigned int PlayerID;
|
||||
typedef unsigned int PacketID;
|
||||
typedef unsigned int AckBitPattern;
|
||||
|
||||
class Network
|
||||
{
|
||||
|
||||
@@ -11,12 +11,12 @@ class Packet
|
||||
public:
|
||||
// arg1: Type of message (Connect, Disconnect...)
|
||||
// arg2: PacketID for identifying packet loss.
|
||||
Packet(MessageType type, unsigned int& packetID);
|
||||
Packet(MessageType type, unsigned int& packetID, unsigned int lastReceivedPacket, unsigned int ackBitField);
|
||||
// Used to create packet from already existing data buffer.
|
||||
Packet(char* data, const int sizeOfPacket);
|
||||
Packet(MessageType type);
|
||||
~Packet();
|
||||
void Init(MessageType type, unsigned int& packetID);
|
||||
void Init(MessageType type, unsigned int& packetID, unsigned int lastReceivedPacket, unsigned int ackBitField);
|
||||
|
||||
// Add primitive types like int, float, char...
|
||||
template<typename T>
|
||||
@@ -50,7 +50,9 @@ public:
|
||||
// Pops the first element as if it was a string.
|
||||
std::string ReadString();
|
||||
char* ReadData(int SizeOfData);
|
||||
void ChangePacketID(unsigned int& packetID);
|
||||
// No purpose any more
|
||||
//void ChangePacketID(unsigned int& packetID);
|
||||
void ChangeHeaderInfo(unsigned int& packetID, unsigned int lastReceivedPacket, unsigned int ackBitField);
|
||||
int Size() { return m_Offset; };
|
||||
char* Data() { return m_Data; };
|
||||
unsigned int DataReadSize() { return m_ReturnDataOffset; }
|
||||
|
||||
@@ -7,7 +7,13 @@ struct PlayerDefinition {
|
||||
::EntityID EntityID = EntityID_Invalid;
|
||||
std::string Name = "";
|
||||
boost::asio::ip::udp::endpoint Endpoint;
|
||||
// The ID of the last sent packet. (Local sequence number)
|
||||
unsigned int PacketID;
|
||||
// The ID of the last received packet. (Remote sequence number)
|
||||
// This is sent as the ackNumber.
|
||||
unsigned int LastPacketReceivedID;
|
||||
// The bit pattern of the last 32 received packets.
|
||||
unsigned int AckBitField;
|
||||
std::clock_t StopTime;
|
||||
};
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ private:
|
||||
char readBuffer[INPUTSIZE] = { 0 };
|
||||
int bytesRead = 0;
|
||||
// time for previouse message
|
||||
std::clock_t previousePingMessage = std::clock();
|
||||
std::clock_t previousPingMessage = std::clock();
|
||||
std::clock_t previousSnapshotMessage = std::clock();
|
||||
std::clock_t timOutTimer = std::clock();
|
||||
// How often we send messages (milliseconds)
|
||||
@@ -58,25 +58,26 @@ private:
|
||||
PacketID m_PreviousPacketID = 0;
|
||||
|
||||
// Private member functions
|
||||
int receive(char* data);
|
||||
void readFromClients();
|
||||
void send(PlayerID player, Packet& packet);
|
||||
void send(Packet& packet);
|
||||
void broadcast(Packet& packet);
|
||||
void sendSnapshot();
|
||||
void addChildrenToPacket(Packet& packet, EntityID entityID);
|
||||
void sendPing();
|
||||
void broadcast(Packet& packet);
|
||||
void checkForTimeOuts();
|
||||
void disconnect(PlayerID playerID);
|
||||
void identifyPacketLoss();
|
||||
void kick(PlayerID player);
|
||||
int receive(char* data);
|
||||
void readFromClients();
|
||||
void send(PlayerID playerID, Packet& packet);
|
||||
void send(Packet& packet);
|
||||
void sendSnapshot();
|
||||
void sendPing();
|
||||
void parseClientPing(PlayerID playerID);
|
||||
void parseConnect(Packet& packet, PlayerID playerID);
|
||||
void parseDisconnect();
|
||||
void parseMessageType(Packet& packet);
|
||||
void parseOnInputCommand(Packet& packet);
|
||||
void parseOnPlayerDamage(Packet& packet);
|
||||
void parseConnect(Packet& packet);
|
||||
void parseDisconnect();
|
||||
void parseClientPing();
|
||||
void parsePing();
|
||||
void identifyPacketLoss();
|
||||
void kick(PlayerID player);
|
||||
|
||||
PlayerID GetPlayerIDFromEndpoint(boost::asio::ip::udp::endpoint endpoint);
|
||||
// Debug event
|
||||
EventRelay<Server, Events::InputCommand> m_EInputCommand;
|
||||
|
||||
Reference in New Issue
Block a user