From 06bddd9d540f05add8348cbb9e586ff52a09bffe Mon Sep 17 00:00:00 2001 From: Jocke Date: Fri, 11 Mar 2016 14:07:03 +0100 Subject: [PATCH] Fixed requests. --- include/Engine/Network/UDPClient.h | 4 +++- src/Engine/Network/UDPClient.cpp | 30 +++++++++++++++--------------- src/Engine/Network/UDPServer.cpp | 10 ---------- 3 files changed, 18 insertions(+), 26 deletions(-) diff --git a/include/Engine/Network/UDPClient.h b/include/Engine/Network/UDPClient.h index 386cc5c0..51dc5e39 100644 --- a/include/Engine/Network/UDPClient.h +++ b/include/Engine/Network/UDPClient.h @@ -6,6 +6,8 @@ #include #include "Network/NetworkClient.h" +typedef std::map>>> PacketMap; + class UDPClient : public NetworkClient { public: @@ -31,7 +33,7 @@ private: void readPartOfPacket(); PacketID m_SendPacketID = 0; //map:(packetGroup, vector:(pair:(groupIndex, packetData))) - std::map>>> m_PacketSegmentMap; + PacketMap m_PacketSegmentMap; bool hasReceivedPacket(int packetGroup, int groupIndex); // 2^19 const int m_SizeOfSocketBuffer = 524288; diff --git a/src/Engine/Network/UDPClient.cpp b/src/Engine/Network/UDPClient.cpp index 306bcb3f..872d567c 100644 --- a/src/Engine/Network/UDPClient.cpp +++ b/src/Engine/Network/UDPClient.cpp @@ -100,12 +100,9 @@ void UDPClient::readPartOfPacket() if (sizeOfPacket == 0) { return; } - int packetGroup = 0; - memcpy(&packetGroup, m_ReadBuffer + sizeof(int), sizeof(int)); - int packetGroupIndex = 0; - memcpy(&packetGroupIndex, m_ReadBuffer + 2 * sizeof(int), sizeof(int)); - int packetGroupSize = 0; - memcpy(&packetGroupSize, m_ReadBuffer + 3 * sizeof(int), sizeof(int)); + int packetGroup = *reinterpret_cast(m_ReadBuffer + sizeof(int)); + int packetGroupIndex = *reinterpret_cast(m_ReadBuffer + 2 * sizeof(int)); + int packetGroupSize = *reinterpret_cast(m_ReadBuffer + 3 * sizeof(int)); //LOG_INFO("Packet group: %i. Group index: %i. Group size: %i. Packet size: %i.", packetGroup, packetGroupIndex, packetGroupSize, sizeOfPacket); if (sizeOfPacket > m_Socket->available()) { LOG_WARNING("UDPClient::readBuffer(): We haven't got the whole packet yet."); @@ -127,10 +124,11 @@ void UDPClient::readPartOfPacket() if (hasReceivedPacket(packetGroup, packetGroupIndex)) { return; } - //std::map>>> packetSegmentMap; // If group exists - if (m_PacketSegmentMap.find(packetGroup) != m_PacketSegmentMap.end()) { - m_PacketSegmentMap.at(packetGroup).push_back(std::make_pair(packetGroupIndex, std::move(packetData))); + PacketMap::iterator it; + it = m_PacketSegmentMap.find(packetGroup); + if (it != m_PacketSegmentMap.end()) { + it->second.push_back(std::make_pair(packetGroupIndex, std::move(packetData))); } else { // Create group and add element m_PacketSegmentMap[packetGroup].push_back(std::make_pair(packetGroupIndex, std::move(packetData))); } @@ -139,8 +137,10 @@ void UDPClient::readPartOfPacket() bool UDPClient::hasReceivedPacket(int packetGroup, int groupIndex) { - if (m_PacketSegmentMap.find(packetGroup) != m_PacketSegmentMap.end()) { - const std::vector>>& loopPacketGroup = m_PacketSegmentMap.at(packetGroup); + PacketMap::iterator it; + it = m_PacketSegmentMap.find(packetGroup); + if (it != m_PacketSegmentMap.end()) { + const std::vector>>& loopPacketGroup = it->second; for (size_t i = 0; i < loopPacketGroup.size(); i++) { if (loopPacketGroup.at(i).first == groupIndex) { return true; @@ -184,7 +184,7 @@ bool UDPClient::GetNextPacket(Packet & packet) // A duplicate packet should not be present in the vector! // Soo we will assume that this is true and only look if size // of vector is correct. - std::map>>>::iterator it = m_PacketSegmentMap.begin(); + PacketMap::iterator it = m_PacketSegmentMap.begin(); while (it != m_PacketSegmentMap.end()) { // pair(Group index, packetData) std::vector>>& currentVector = it->second; @@ -209,9 +209,9 @@ bool UDPClient::GetNextPacket(Packet & packet) packet.ReconstructFromData(currentVector.at(0).second.get(), packet.HeaderSize()); // Add the rest of the packets. int sizeOfData = 0; - for (size_t i = 0; i < currentVector.size(); i++) { - memcpy(&sizeOfData, currentVector.at(i).second.get(), sizeof(int)); - packet.WriteData(currentVector.at(i).second.get() + packet.HeaderSize(), sizeOfData - packet.HeaderSize()); + for (auto& packetSegment : currentVector) { + memcpy(&sizeOfData, packetSegment.second.get(), sizeof(int)); + packet.WriteData(packetSegment.second.get() + packet.HeaderSize(), sizeOfData - packet.HeaderSize()); } if (headerInfoPacket.GetMessageType() == MessageType::Snapshot) { m_LastReceivedSnapshotGroup = packet.Group(); diff --git a/src/Engine/Network/UDPServer.cpp b/src/Engine/Network/UDPServer.cpp index 34a8175c..e67a66c4 100644 --- a/src/Engine/Network/UDPServer.cpp +++ b/src/Engine/Network/UDPServer.cpp @@ -17,9 +17,6 @@ void UDPServer::Send(Packet& packet, PlayerDefinition& playerDefinition) { packet.UpdateSize(); try { - //Debug - int debugTheSixeOfpacket = packet.Size(); - //Debug end // Remove header from packet. packet.ReadData(packet.HeaderSize()); int totalBytesSent = 0; @@ -61,14 +58,7 @@ void UDPServer::Send(Packet& packet, PlayerDefinition& playerDefinition) void UDPServer::SendToConnectedPlayers(Packet& packet, std::map& playersTosendTo) { - // Remove a player if hen crashes. - // Return a vector with disconnected players. - // Work in progress packet.UpdateSize(); - - //Debug - int debugTheSixeOfpacket = packet.Size(); - //Debug end // Remove header from packet. packet.ReadData(packet.HeaderSize()); int totalBytesSent = 0;