From 97a0d97b0b4141cd98aac16cd99b40e9696f3dd4 Mon Sep 17 00:00:00 2001 From: stiffly Date: Wed, 16 Dec 2015 17:56:44 +0100 Subject: [PATCH] Can now send transform components. --- include/Engine/Network/Package.h | 5 +++++ src/Engine/Network/Client.cpp | 19 +++++++++++-------- src/Engine/Network/Package.cpp | 16 ++++++++++++++++ src/Engine/Network/Server.cpp | 15 ++++++++------- 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/include/Engine/Network/Package.h b/include/Engine/Network/Package.h index a7b3c126..9b45101d 100644 --- a/include/Engine/Network/Package.h +++ b/include/Engine/Network/Package.h @@ -14,6 +14,7 @@ public: Package(MessageType type, unsigned int& packageID); // Used to create package from already existing data buffer. Package(char* data, const int sizeOfPackage); + ~Package(); // Add primitive types like int, float, char... template @@ -35,9 +36,13 @@ public: m_ReturnDataOffset += sizeof(T); return returnValue; } + // Add a string to the message void AddString(std::string str); + // Add data to the message + void AddData(char* data, int sizeOfData); // Pops the first element as if it was a string. std::string PopFrontString(); + char* PopData(int SizeOfData); int Size() { return m_Offset; }; char* Data() { return m_Data; }; diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index a4199b8e..9c16b6e9 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -5,7 +5,7 @@ using namespace boost::asio::ip; Client::Client() : m_Socket(m_IOService) { - m_ReceiverEndpoint = udp::endpoint(boost::asio::ip::address::from_string("192.168.1.6"), 13); + m_ReceiverEndpoint = udp::endpoint(boost::asio::ip::address::from_string("192.168.1.2"), 13); // Set up network stream m_NextSnapshot.InputForward = ""; m_NextSnapshot.InputRight = ""; @@ -165,8 +165,6 @@ void Client::ParseMessageType(Package& package) void Client::ParseConnect(Package& package) { - m_PacketID = package.PopFrontPrimitive(); - m_PreviousPacketID = m_PacketID; m_PlayerID = package.PopFrontPrimitive(); std::cout << m_PacketID << ": I am player: " << m_PlayerID << std::endl; } @@ -222,13 +220,18 @@ void Client::ParseSnapshot(Package& package) break; } // Read position data - glm::vec3 playerPos; - playerPos.x = package.PopFrontPrimitive(); - playerPos.y = package.PopFrontPrimitive(); - playerPos.z = package.PopFrontPrimitive(); + //glm::vec3 playerPos; + //playerPos.x = package.PopFrontPrimitive(); + //playerPos.y = package.PopFrontPrimitive(); + //playerPos.z = package.PopFrontPrimitive(); + + + // Move player to server position if (m_PlayerDefinitions[i].EntityID != -1) { - m_World->GetComponent(m_PlayerDefinitions[i].EntityID, "Transform")["Position"] = playerPos; + //m_World->GetComponent(m_PlayerDefinitions[i].EntityID, "Transform")["Position"] = playerPos; + int dataSize = m_World->GetComponent(m_PlayerDefinitions[i].EntityID, "Transform").Info.Meta.Stride; + memcpy(m_World->GetComponent(m_PlayerDefinitions[i].EntityID, "Transform").Data, package.PopData(dataSize), dataSize); } } } diff --git a/src/Engine/Network/Package.cpp b/src/Engine/Network/Package.cpp index a30d3ee5..43c28837 100644 --- a/src/Engine/Network/Package.cpp +++ b/src/Engine/Network/Package.cpp @@ -33,6 +33,15 @@ void Package::AddString(std::string str) m_Offset += (str.size() + 1) * sizeof(char); } +void Package::AddData(char * data, int sizeOfData) +{ + if (m_Offset + sizeOfData > 128) { + LOG_WARNING("Package::AddData(): Data size in package exceeded maximum package size.\n"); + } + memcpy(m_Data + m_Offset, data, sizeOfData); + m_Offset += sizeOfData; +} + std::string Package::PopFrontString() { std::string returnValue(m_Data + m_ReturnDataOffset); @@ -44,3 +53,10 @@ std::string Package::PopFrontString() m_ReturnDataOffset += returnValue.size() + 1; return returnValue; } + +char * Package::PopData(int SizeOfData) +{ + unsigned int oldReturnDataOffset = m_ReturnDataOffset; + m_ReturnDataOffset += SizeOfData; + return (m_Data + oldReturnDataOffset); +} diff --git a/src/Engine/Network/Server.cpp b/src/Engine/Network/Server.cpp index 3d9d171a..d1d0c4c7 100644 --- a/src/Engine/Network/Server.cpp +++ b/src/Engine/Network/Server.cpp @@ -229,13 +229,14 @@ void Server::SendSnapshot() continue; } - - // Pack player pos into data package - glm::vec3 playerPos = m_World->GetComponent(m_PlayerDefinitions[i].EntityID, "Transform")["Position"]; - //glm::vec3 playerPos = glm::vec3(1.0f); - package.AddPrimitive(playerPos.x); - package.AddPrimitive(playerPos.y); - package.AddPrimitive(playerPos.z); + //// Pack player pos into data package + //glm::vec3 playerPos = m_World->GetComponent(m_PlayerDefinitions[i].EntityID, "Transform")["Position"]; + ////glm::vec3 playerPos = glm::vec3(1.0f); + //package.AddPrimitive(playerPos.x); + //package.AddPrimitive(playerPos.y); + //package.AddPrimitive(playerPos.z); + auto transform = m_World->GetComponent(m_PlayerDefinitions[i].EntityID, "Transform"); + package.AddData(transform.Data, transform.Info.Meta.Stride); } Broadcast(package); }