diff --git a/modules/softwareintegration/network/softwareconnection.cpp b/modules/softwareintegration/network/softwareconnection.cpp index f9ea570d71..dd7dc5abcb 100644 --- a/modules/softwareintegration/network/softwareconnection.cpp +++ b/modules/softwareintegration/network/softwareconnection.cpp @@ -71,8 +71,8 @@ namespace openspace { } SoftwareConnection::Message SoftwareConnection::receiveMessage() { - // Header consists of version (1 char), message type (4 char) & message size (4 char) - size_t HeaderSize = 9 * sizeof(char); + // Header consists of version (1 char), message type (4 char) & message size (9 char) + size_t HeaderSize = 14 * sizeof(char); // Create basic buffer for receiving first part of message std::vector headerBuffer(HeaderSize); @@ -101,12 +101,12 @@ namespace openspace { // Read message type: Byte 1-4 std::string type; - for(int i = 1; i < 5; i++) + for(int i = 1; i <= 4; i++) type.push_back(headerBuffer[i]); - // Read and convert message size: Byte 5-8 + // Read and convert message size: Byte 5-13 std::string messageSizeIn; - for (int i = 5; i < 9; i++) + for (int i = 5; i <= 13; i++) messageSizeIn.push_back(headerBuffer[i]); const size_t messageSize = stoi(messageSizeIn); @@ -120,6 +120,8 @@ namespace openspace { // And delegate decoding depending on message type if (type == "CONN") return Message(MessageType::Connection, messageBuffer); + if (type == "DATA") + return Message(MessageType::ReadBinaryData, messageBuffer); else if( type == "ASGN") return Message(MessageType::AddSceneGraphNode, messageBuffer); else if (type == "RSGN") diff --git a/modules/softwareintegration/network/softwareconnection.h b/modules/softwareintegration/network/softwareconnection.h index 1a624b403c..3fa3ed4655 100644 --- a/modules/softwareintegration/network/softwareconnection.h +++ b/modules/softwareintegration/network/softwareconnection.h @@ -39,6 +39,7 @@ public: enum class MessageType : uint32_t { Connection = 0, + ReadBinaryData, AddSceneGraphNode, RemoveSceneGraphNode, Color, diff --git a/modules/softwareintegration/softwareintegrationmodule.cpp b/modules/softwareintegration/softwareintegrationmodule.cpp index b7567a44a7..6ada68d258 100644 --- a/modules/softwareintegration/softwareintegrationmodule.cpp +++ b/modules/softwareintegration/softwareintegrationmodule.cpp @@ -169,6 +169,16 @@ namespace openspace { LINFO(fmt::format("OpenSpace has connected with {} through socket.", software)); break; } + case SoftwareConnection::MessageType::ReadBinaryData: { + std::string binarydata(message.begin(), message.end()); + LERROR(fmt::format("Binary data recieved {}", binarydata)); + + std::vector xCoordinates = readData(message); + std::vector yCoordinates = readData(message); + std::vector zCoordinates = readData(message); + + break; + } case SoftwareConnection::MessageType::AddSceneGraphNode: { std::string identifier = readIdentifier(message); glm::vec3 color = readColor(message); @@ -389,6 +399,36 @@ namespace openspace { return floatValue; } + std::vector SoftwareIntegrationModule::readData(std::vector& message) { + std::string length; + for(int i = 0; i <= 8; i++) + length.push_back(message[i]); + + int lengthOfData = stoi(length); + int counter = 0; + messageOffset = 9; // Resets messageOffset + + std::vector< float > data; + std::string value; + + while (counter != lengthOfData) + { + while (message[messageOffset] != ',') + { + value.push_back(message[messageOffset]); + messageOffset++; + counter++; + } + float dataValue = stof(value); + data.push_back(dataValue); + value = ""; + messageOffset++; + counter++; + } + + return data; + } + std::string SoftwareIntegrationModule::readIdentifier(std::vector& message) { std::string length; length.push_back(message[0]); diff --git a/modules/softwareintegration/softwareintegrationmodule.h b/modules/softwareintegration/softwareintegrationmodule.h index 5d0419e012..9fd29032a5 100644 --- a/modules/softwareintegration/softwareintegrationmodule.h +++ b/modules/softwareintegration/softwareintegrationmodule.h @@ -45,7 +45,7 @@ public: void stop(); size_t nConnections() const; - size_t messageOffset = 0; // Byt namn till tvÄ size begin & end + size_t messageOffset = 0; std::vector documentations() const override; @@ -78,6 +78,7 @@ private: void handleProperties(std::string identifier, const std::shared_ptr& peer); float readFloatValue(std::vector& message); + std::vector readData(std::vector& message); std::string readIdentifier(std::vector& message); std::string readString(std::vector& message); glm::vec3 readColor(std::vector& message);