Reactored the package loss logic.

Server cannot handle multiple clients yet.
Fixed WorldTest code by adding astrix.
This commit is contained in:
Jocke
2015-12-11 11:55:23 +01:00
parent 641a43b2ec
commit 01d7388f91
8 changed files with 70 additions and 104 deletions
+2 -1
View File
@@ -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;
+16 -16
View File
@@ -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
+7 -10
View File
@@ -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