Added sequnceNumber and totalNumberOfPackets to packet for packet splitting.

This commit is contained in:
Jocke
2016-03-07 14:22:09 +01:00
parent 46d7c8bea4
commit 078d6eb712
4 changed files with 34 additions and 15 deletions
+2 -1
View File
@@ -16,7 +16,8 @@ public:
Packet(char* data, const size_t sizeOfPacket); Packet(char* data, const size_t sizeOfPacket);
Packet(MessageType type); Packet(MessageType type);
~Packet(); ~Packet();
void Init(MessageType type, unsigned int& packetID); void Init(MessageType type, unsigned int& packetID,
int sequenceNumber, int totalAmountOfPackets);
// Add primitive types like int, float, char... // Add primitive types like int, float, char...
template<typename T> template<typename T>
+12 -5
View File
@@ -102,8 +102,12 @@ void Client::Update()
void Client::parseMessageType(Packet& packet) void Client::parseMessageType(Packet& packet)
{ {
// Pop packetSize // Pop packetSize, sequenceNumber and packetsInSequence.
// create a packet of the correct size
packet.ReadPrimitive<int>(); packet.ReadPrimitive<int>();
packet.ReadPrimitive<int>();
packet.ReadPrimitive<int>();
int messageType = packet.ReadPrimitive<int>(); int messageType = packet.ReadPrimitive<int>();
if (messageType == -1) if (messageType == -1)
return; return;
@@ -164,8 +168,11 @@ void Client::parseUDPConnect(Packet& packet)
void Client::parseTCPConnect(Packet& packet) void Client::parseTCPConnect(Packet& packet)
{ {
LOG_INFO("Received TCP connect from server"); LOG_INFO("Received TCP connect from server");
// Pop size of message int // Pop packetSize, sequenceNumber and packetsInSequence.
packet.ReadPrimitive<int>(); packet.ReadPrimitive<int>();
packet.ReadPrimitive<int>();
packet.ReadPrimitive<int>();
int messageType = packet.ReadPrimitive<int>(); int messageType = packet.ReadPrimitive<int>();
// Read packet ID // Read packet ID
m_PreviousPacketID = m_PacketID; // Set previous packet id m_PreviousPacketID = m_PacketID; // Set previous packet id
@@ -177,8 +184,8 @@ void Client::parseTCPConnect(Packet& packet)
Packet UnreliablePacket(MessageType::Connect, m_SendPacketID); Packet UnreliablePacket(MessageType::Connect, m_SendPacketID);
// Add player id and other stuff // Add player id and other stuff
packet.WritePrimitive(m_PlayerID); packet.WritePrimitive(m_PlayerID);
// m_Unreliable.Send(packet); // m_Unreliable.Send(packet);
// LOG_INFO("Sent UDP Connect Server"); // LOG_INFO("Sent UDP Connect Server");
} }
void Client::parsePlayerConnected(Packet & packet) void Client::parsePlayerConnected(Packet & packet)
@@ -476,7 +483,7 @@ bool Client::OnInputCommand(const Events::InputCommand & e)
if (e.Command == "ConnectToServer") { // Connect for now if (e.Command == "ConnectToServer") { // Connect for now
if (e.Value > 0) { if (e.Value > 0) {
m_Reliable.Connect(m_PlayerName, m_Address, m_Port); m_Reliable.Connect(m_PlayerName, m_Address, m_Port);
// m_Unreliable.Connect(m_PlayerName, m_Address, m_Port); // m_Unreliable.Connect(m_PlayerName, m_Address, m_Port);
} }
//LOG_DEBUG("Client::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID); //LOG_DEBUG("Client::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
return true; return true;
+9 -5
View File
@@ -3,7 +3,7 @@
Packet::Packet(MessageType type, unsigned int& packetID) Packet::Packet(MessageType type, unsigned int& packetID)
{ {
m_Data = new char[m_MaxPacketSize]; m_Data = new char[m_MaxPacketSize];
Init(type, packetID); Init(type, packetID, 1, 1);
} }
// Create message // Create message
@@ -21,7 +21,7 @@ Packet::Packet(MessageType type)
{ {
m_Data = new char[m_MaxPacketSize]; m_Data = new char[m_MaxPacketSize];
unsigned int dummy = 0; unsigned int dummy = 0;
Init(type, dummy); Init(type, dummy, 1, 1);
} }
Packet::~Packet() Packet::~Packet()
@@ -29,13 +29,17 @@ Packet::~Packet()
delete[] m_Data; delete[] m_Data;
} }
void Packet::Init(MessageType type, unsigned int & packetID) void Packet::Init(MessageType type, unsigned int & packetID,
int sequenceNumber, int totalAmountOfPackets)
{ {
m_ReturnDataOffset = 0; m_ReturnDataOffset = 0;
m_Offset = 0; m_Offset = 0;
// Create message header // Create message header
// allocate memory for size of packet(only used in tcp) // allocate memory for size of packet, sequenceNumber and totalPacketesInSequence
WritePrimitive<int>(0); WritePrimitive<int>(0);
WritePrimitive(sequenceNumber);
WritePrimitive(totalAmountOfPackets);
// If you add things before here be sure to change in GetMessageType()
// Add message type // Add message type
int messageType = static_cast<int>(type); int messageType = static_cast<int>(type);
WritePrimitive<int>(messageType); WritePrimitive<int>(messageType);
@@ -129,7 +133,7 @@ void Packet::ChangePacketID(unsigned int & packetID)
MessageType Packet::GetMessageType() MessageType Packet::GetMessageType()
{ {
MessageType messagType; MessageType messagType;
memcpy(&messagType, m_Data + sizeof(int), sizeof(int)); memcpy(&messagType, m_Data + 3 * sizeof(int), sizeof(int));
return messagType; return messagType;
} }
+11 -4
View File
@@ -107,9 +107,11 @@ void Server::Update()
void Server::parseMessageType(Packet& packet) void Server::parseMessageType(Packet& packet)
{ {
// Pop packetSize which is used by TCP Client to // Pop packetSize, sequenceNumber and packetsInSequence.
// create a packet of the correct size // create a packet of the correct size
packet.ReadPrimitive<int>(); packet.ReadPrimitive<int>();
packet.ReadPrimitive<int>();
packet.ReadPrimitive<int>();
int messageType = packet.ReadPrimitive<int>(); // Read what type off message was sent from server int messageType = packet.ReadPrimitive<int>(); // Read what type off message was sent from server
// Read packet ID // Read packet ID
@@ -322,8 +324,10 @@ void Server::checkForTimeOuts()
//void Server::parseUDPConnect(Packet & packet) //void Server::parseUDPConnect(Packet & packet)
//{ //{
// // Pop size of message int // Pop packetSize, sequenceNumber and packetsInSequence.
// packet.ReadPrimitive<int>(); //packet.ReadPrimitive<int>();
//packet.ReadPrimitive<int>();
//packet.ReadPrimitive<int>();
// int messageType = packet.ReadPrimitive<int>(); // int messageType = packet.ReadPrimitive<int>();
// // Read packet ID // // Read packet ID
// m_PreviousPacketID = m_PacketID; // Set previous packet id // m_PreviousPacketID = m_PacketID; // Set previous packet id
@@ -345,8 +349,11 @@ void Server::checkForTimeOuts()
void Server::parseTCPConnect(Packet & packet) void Server::parseTCPConnect(Packet & packet)
{ {
// Pop size of message int // Pop packetSize, sequenceNumber and packetsInSequence.
packet.ReadPrimitive<int>(); packet.ReadPrimitive<int>();
packet.ReadPrimitive<int>();
packet.ReadPrimitive<int>();
int messageType = packet.ReadPrimitive<int>(); int messageType = packet.ReadPrimitive<int>();
// Read packet ID // Read packet ID
m_PreviousPacketID = m_PacketID; // Set previous packet id m_PreviousPacketID = m_PacketID; // Set previous packet id