diff --git a/include/Engine/Network/Packet.h b/include/Engine/Network/Packet.h index e7444d9d..658c4862 100644 --- a/include/Engine/Network/Packet.h +++ b/include/Engine/Network/Packet.h @@ -16,7 +16,8 @@ public: Packet(char* data, const size_t sizeOfPacket); Packet(MessageType type); ~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... template diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index e29c4755..d8a8ae2b 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -102,8 +102,12 @@ void Client::Update() void Client::parseMessageType(Packet& packet) { - // Pop packetSize + // Pop packetSize, sequenceNumber and packetsInSequence. + // create a packet of the correct size packet.ReadPrimitive(); + packet.ReadPrimitive(); + packet.ReadPrimitive(); + int messageType = packet.ReadPrimitive(); if (messageType == -1) return; @@ -164,8 +168,11 @@ void Client::parseUDPConnect(Packet& packet) void Client::parseTCPConnect(Packet& packet) { LOG_INFO("Received TCP connect from server"); - // Pop size of message int + // Pop packetSize, sequenceNumber and packetsInSequence. packet.ReadPrimitive(); + packet.ReadPrimitive(); + packet.ReadPrimitive(); + int messageType = packet.ReadPrimitive(); // Read 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); // Add player id and other stuff packet.WritePrimitive(m_PlayerID); - // m_Unreliable.Send(packet); - // LOG_INFO("Sent UDP Connect Server"); + // m_Unreliable.Send(packet); + // LOG_INFO("Sent UDP Connect Server"); } 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.Value > 0) { 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); return true; diff --git a/src/Engine/Network/Packet.cpp b/src/Engine/Network/Packet.cpp index 6a4d0098..db9c61f4 100644 --- a/src/Engine/Network/Packet.cpp +++ b/src/Engine/Network/Packet.cpp @@ -3,7 +3,7 @@ Packet::Packet(MessageType type, unsigned int& packetID) { m_Data = new char[m_MaxPacketSize]; - Init(type, packetID); + Init(type, packetID, 1, 1); } // Create message @@ -21,7 +21,7 @@ Packet::Packet(MessageType type) { m_Data = new char[m_MaxPacketSize]; unsigned int dummy = 0; - Init(type, dummy); + Init(type, dummy, 1, 1); } Packet::~Packet() @@ -29,13 +29,17 @@ Packet::~Packet() 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_Offset = 0; // Create message header - // allocate memory for size of packet(only used in tcp) + // allocate memory for size of packet, sequenceNumber and totalPacketesInSequence WritePrimitive(0); + WritePrimitive(sequenceNumber); + WritePrimitive(totalAmountOfPackets); + // If you add things before here be sure to change in GetMessageType() // Add message type int messageType = static_cast(type); WritePrimitive(messageType); @@ -129,7 +133,7 @@ void Packet::ChangePacketID(unsigned int & packetID) MessageType Packet::GetMessageType() { MessageType messagType; - memcpy(&messagType, m_Data + sizeof(int), sizeof(int)); + memcpy(&messagType, m_Data + 3 * sizeof(int), sizeof(int)); return messagType; } diff --git a/src/Engine/Network/Server.cpp b/src/Engine/Network/Server.cpp index 5bfb4000..92cfbedb 100644 --- a/src/Engine/Network/Server.cpp +++ b/src/Engine/Network/Server.cpp @@ -107,9 +107,11 @@ void Server::Update() 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 packet.ReadPrimitive(); + packet.ReadPrimitive(); + packet.ReadPrimitive(); int messageType = packet.ReadPrimitive(); // Read what type off message was sent from server // Read packet ID @@ -322,8 +324,10 @@ void Server::checkForTimeOuts() //void Server::parseUDPConnect(Packet & packet) //{ -// // Pop size of message int -// packet.ReadPrimitive(); +// Pop packetSize, sequenceNumber and packetsInSequence. +//packet.ReadPrimitive(); +//packet.ReadPrimitive(); +//packet.ReadPrimitive(); // int messageType = packet.ReadPrimitive(); // // Read packet ID // m_PreviousPacketID = m_PacketID; // Set previous packet id @@ -345,8 +349,11 @@ void Server::checkForTimeOuts() void Server::parseTCPConnect(Packet & packet) { - // Pop size of message int + // Pop packetSize, sequenceNumber and packetsInSequence. packet.ReadPrimitive(); + packet.ReadPrimitive(); + packet.ReadPrimitive(); + int messageType = packet.ReadPrimitive(); // Read packet ID m_PreviousPacketID = m_PacketID; // Set previous packet id