Reactored the package loss logic.
Server cannot handle multiple clients yet. Fixed WorldTest code by adding astrix.
This commit is contained in:
@@ -51,8 +51,9 @@ private:
|
||||
boost::asio::ip::udp::socket m_Socket;
|
||||
|
||||
// Packet loss logic
|
||||
unsigned int m_PacketID = 0;
|
||||
unsigned int m_PacketID = 0;
|
||||
unsigned int m_PreviousPacketID = 0;
|
||||
unsigned int m_SendPacketID = 0;
|
||||
|
||||
World* m_World;
|
||||
int m_PlayerID = -1;
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
#define BOARDSIZE 16
|
||||
#define MAXCONNECTIONS 8
|
||||
#define INPUTSIZE 128
|
||||
#define PACKETMODULUS 1000 // How many packets to send before the number resets
|
||||
#define PLAYERSPEED 0.2f;
|
||||
|
||||
typedef boost::shared_ptr<boost::asio::ip::udp::socket> socket_ptr;
|
||||
|
||||
@@ -8,25 +8,25 @@
|
||||
class Package
|
||||
{
|
||||
public:
|
||||
// arg1: Type of message (Connect, Disconnect...)
|
||||
// arg2: PackageID for identifying packet loss.
|
||||
Package(MessageType type);
|
||||
~Package();
|
||||
// Add primitive types like int, float, char...
|
||||
template<typename T>
|
||||
void AddPrimitive(T val)
|
||||
{
|
||||
memcpy(m_Data + m_Offset, &val, sizeof(T));
|
||||
m_Offset += sizeof(T);
|
||||
}
|
||||
void AddString(std::string str);
|
||||
// arg1: Type of message (Connect, Disconnect...)
|
||||
// arg2: PackageID for identifying packet loss.
|
||||
Package(MessageType type, unsigned int& packageID);
|
||||
~Package();
|
||||
// Add primitive types like int, float, char...
|
||||
template<typename T>
|
||||
void AddPrimitive(T val)
|
||||
{
|
||||
memcpy(m_Data + m_Offset, &val, sizeof(T));
|
||||
m_Offset += sizeof(T);
|
||||
}
|
||||
void AddString(std::string str);
|
||||
|
||||
int Size() { return m_Offset; };
|
||||
char* Data() { return m_Data; };
|
||||
int Size() { return m_Offset; };
|
||||
char* Data() { return m_Data; };
|
||||
|
||||
private:
|
||||
char* m_Data = new char[128];
|
||||
int m_Offset = 0;
|
||||
char* m_Data = new char[128];
|
||||
int m_Offset = 0;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -32,11 +32,10 @@ private:
|
||||
std::clock_t m_StopTimes[8];
|
||||
// Game logic
|
||||
World* m_World;
|
||||
// Packet loss logic
|
||||
unsigned int m_PacketCounter = 0;
|
||||
unsigned int m_PacketID = 0;
|
||||
const unsigned int m_PacketModolus = 1000;
|
||||
|
||||
// Packet loss logic
|
||||
unsigned int m_PacketID;
|
||||
unsigned int m_PreviousPacketID;
|
||||
unsigned int m_SendPacketID;
|
||||
// Close logic
|
||||
bool m_ThreadIsRunning = true;
|
||||
// Threaded
|
||||
@@ -45,18 +44,15 @@ private:
|
||||
void InputLoop();
|
||||
|
||||
|
||||
|
||||
int Receive(char* data, size_t length);
|
||||
void Send(Package& package, int playerID);
|
||||
void Send(Package& package);
|
||||
int CreateMessage(MessageType type, std::string message, char * data);
|
||||
void Send(Package& package, int playerID);
|
||||
void Send(Package& package);
|
||||
void MoveMessageHead(char*& data, size_t& length, size_t stepSize);
|
||||
void Broadcast(std::string message);
|
||||
void Broadcast(Package& package);
|
||||
void SendSnapshot();
|
||||
void SendPing();
|
||||
void CheckForTimeOuts();
|
||||
int CreateHeader(MessageType type, char* data);
|
||||
void Disconnect(int i);
|
||||
void ParseMessageType(char* data, size_t length);
|
||||
void ParseEvent(char* data, size_t length);
|
||||
@@ -65,6 +61,7 @@ private:
|
||||
void ParseClientPing();
|
||||
void ParseServerPing();
|
||||
void ParseSnapshot(char* data, size_t length);
|
||||
void IdentifyPacketLoss();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user