diff --git a/modules/softwareintegration/softwareintegrationmodule.cpp b/modules/softwareintegration/softwareintegrationmodule.cpp index 4740778d8f..a82bdc31de 100644 --- a/modules/softwareintegration/softwareintegrationmodule.cpp +++ b/modules/softwareintegration/softwareintegrationmodule.cpp @@ -48,20 +48,20 @@ namespace { namespace openspace { - const unsigned int Connection::ProtocolVersion = 1; + const unsigned int SoftwareConnection::ProtocolVersion = 1; SoftwareIntegrationModule::SoftwareIntegrationModule() : OpenSpaceModule(Name) {} - Connection::Message::Message(MessageType type, std::vector content) + SoftwareConnection::Message::Message(MessageType type, std::vector content) : type(type) , content(std::move(content)) {} - Connection::ConnectionLostError::ConnectionLostError() + SoftwareConnection::SoftwareConnectionLostError::SoftwareConnectionLostError() : ghoul::RuntimeError("Connection lost", "Connection") {} - Connection::Connection(std::unique_ptr socket) + SoftwareConnection::SoftwareConnection(std::unique_ptr socket) : _socket(std::move(socket)) {} @@ -80,24 +80,24 @@ namespace openspace { } // Connection - bool Connection::isConnectedOrConnecting() const { + bool SoftwareConnection::isConnectedOrConnecting() const { return _socket->isConnected() || _socket->isConnecting(); } // Connection - void Connection::disconnect() { + void SoftwareConnection::disconnect() { if (_socket) { _socket->disconnect(); } } // Connection - ghoul::io::TcpSocket* Connection::socket() { + ghoul::io::TcpSocket* SoftwareConnection::socket() { return _socket.get(); } // Connection - Connection::Message Connection::receiveMessage() { + SoftwareConnection::Message SoftwareConnection::receiveMessage() { // Header consists of... size_t HeaderSize = 9 * sizeof(char); @@ -109,7 +109,7 @@ namespace openspace { // Receive the header data if (!_socket->get(headerBuffer.data(), HeaderSize)) { LERROR("Failed to read header from socket. Disconnecting."); - throw ConnectionLostError(); + throw SoftwareConnectionLostError(); } std::string version; @@ -123,7 +123,7 @@ namespace openspace { protocolVersionIn, ProtocolVersion )); - throw ConnectionLostError(); + throw SoftwareConnectionLostError(); } std::string type; @@ -143,7 +143,7 @@ namespace openspace { messageBuffer.resize(messageSize); if (!_socket->get(messageBuffer.data(), messageSize)) { LERROR("Failed to read message from socket. Disconnecting."); - throw ConnectionLostError(); + throw SoftwareConnectionLostError(); } // And delegate decoding depending on type @@ -186,8 +186,8 @@ namespace openspace { std::shared_ptr p = std::make_shared(Peer{ id, "", - Connection(std::move(socket)), - Connection::Status::Connecting, + SoftwareConnection(std::move(socket)), + SoftwareConnection::Status::Connecting, std::thread() }); auto it = _peers.emplace(p->id, p); @@ -218,15 +218,15 @@ namespace openspace { return; } try { - Connection::Message m = p->connection.receiveMessage(); + SoftwareConnection::Message m = p->connection.receiveMessage(); _incomingMessages.push({ id, m }); } - catch (const Connection::ConnectionLostError&) { + catch (const SoftwareConnection::SoftwareConnectionLostError&) { LERROR(fmt::format("Connection lost to {}", p->id)); _incomingMessages.push({ id, - Connection::Message( - Connection::MessageType::Disconnection, std::vector() + SoftwareConnection::Message( + SoftwareConnection::MessageType::Disconnection, std::vector() ) }); return; @@ -252,25 +252,119 @@ namespace openspace { /* LERROR(fmt::format("Name: {}", sName)); */ - const Connection::MessageType messageType = peerMessage.message.type; + const SoftwareConnection::MessageType messageType = peerMessage.message.type; std::vector& message = peerMessage.message.content; std::string ms(message.begin(), message.end()); switch (messageType) { - case Connection::MessageType::Connection: { + case SoftwareConnection::MessageType::Connection: { //handleData(*peer, std::move(data)); break; } - case Connection::MessageType::AddSceneGraph: { + case SoftwareConnection::MessageType::AddSceneGraph: { + std::string length_of_identifier; + length_of_identifier.push_back(message[0]); + length_of_identifier.push_back(message[1]); + + size_t offset = 2; + int counter = 0; + + int lengthOfIdentifier = stoi(length_of_identifier); + std::string identifier; + while (counter != lengthOfIdentifier) + { + identifier.push_back(message[offset]); + offset++; + counter++; + } + + std::string length_of_color; + length_of_color.push_back(message[offset]); + length_of_color.push_back(message[offset + 1]); + offset += 2; + + int lengthOfColor = stoi(length_of_color); + std::string color; + counter = 0; + while (counter != lengthOfColor) + { + color.push_back(message[offset]); + offset++; + counter++; + } + + std::string length_of_file; + length_of_file.push_back(message[offset]); + length_of_file.push_back(message[offset + 1]); + offset += 2; + + int lengthOfFile = stoi(length_of_file); + std::string file; + counter = 0; + while (counter != lengthOfFile) + { + file.push_back(message[offset]); + offset++; + counter++; + } + + std::string length_of_opacity; + length_of_opacity.push_back(message[offset]); + offset += 1; + + int lengthOfOpacity = stoi(length_of_opacity); + std::string opacity; + counter = 0; + while (counter != lengthOfOpacity) + { + opacity.push_back(message[offset]); + offset++; + counter++; + } + + std::string length_of_size; + length_of_size.push_back(message[offset]); + offset += 1; + + int lengthOfSize = stoi(length_of_size); + std::string size; + counter = 0; + while (counter != lengthOfSize) + { + size.push_back(message[offset]); + offset++; + counter++; + } + + std::string length_of_gui; + length_of_gui.push_back(message[offset]); + length_of_gui.push_back(message[offset + 1]); + offset += 2; + + int lengthOfGui = stoi(length_of_gui); + std::string gui; + counter = 0; + while (counter != lengthOfGui) + { + gui.push_back(message[offset]); + offset++; + counter++; + } + + LERROR(fmt::format("Identifier: {}", identifier)); + LERROR(fmt::format("Color: {}", color)); + LERROR(fmt::format("File: {}", file)); + LERROR(fmt::format("Opacity: {}", opacity)); + LERROR(fmt::format("Size: {}", size)); + LERROR(fmt::format("Gui: {}", gui)); - LERROR("Hej ny scene graph"); break; } - case Connection::MessageType::RemoveSceneGraph: { + case SoftwareConnection::MessageType::RemoveSceneGraph: { std::string identifier(message.begin(), message.end()); LERROR(fmt::format("Identifier: {}", identifier)); break; } - case Connection::MessageType::Color: { + case SoftwareConnection::MessageType::Color: { std::string length_of_identifier; length_of_identifier.push_back(message[0]); length_of_identifier.push_back(message[1]); @@ -307,7 +401,7 @@ namespace openspace { break; } - case Connection::MessageType::Opacity: { + case SoftwareConnection::MessageType::Opacity: { std::string length_of_identifier; length_of_identifier.push_back(message[0]); length_of_identifier.push_back(message[1]); @@ -343,7 +437,7 @@ namespace openspace { break; } - case Connection::MessageType::Size: { + case SoftwareConnection::MessageType::Size: { std::string length_of_identifier; length_of_identifier.push_back(message[0]); length_of_identifier.push_back(message[1]); @@ -378,7 +472,7 @@ namespace openspace { LERROR(fmt::format("Size: {}", value)); break; } - case Connection::MessageType::Disconnection: { + case SoftwareConnection::MessageType::Disconnection: { disconnect(*peer); break; } @@ -392,8 +486,8 @@ namespace openspace { // Server bool SoftwareIntegrationModule::isConnected(const Peer& peer) const { - return peer.status != Connection::Status::Connecting && - peer.status != Connection::Status::Disconnected; + return peer.status != SoftwareConnection::Status::Connecting && + peer.status != SoftwareConnection::Status::Disconnected; } // Server diff --git a/modules/softwareintegration/softwareintegrationmodule.h b/modules/softwareintegration/softwareintegrationmodule.h index f73a2f8a8e..869f63221a 100644 --- a/modules/softwareintegration/softwareintegrationmodule.h +++ b/modules/softwareintegration/softwareintegrationmodule.h @@ -39,7 +39,7 @@ namespace openspace { -class Connection { +class SoftwareConnection { public: // Connection enum class Status : uint32_t { @@ -65,19 +65,19 @@ public: std::vector content; }; - class ConnectionLostError : public ghoul::RuntimeError { + class SoftwareConnectionLostError : public ghoul::RuntimeError { public: - explicit ConnectionLostError(); + explicit SoftwareConnectionLostError(); }; - Connection(std::unique_ptr socket); + SoftwareConnection(std::unique_ptr socket); // Connection bool isConnectedOrConnecting() const; void disconnect(); ghoul::io::TcpSocket* socket(); - Connection::Message receiveMessage(); + SoftwareConnection::Message receiveMessage(); static const unsigned int ProtocolVersion; @@ -107,14 +107,14 @@ private: struct Peer { size_t id; std::string name; - Connection connection; - Connection::Status status; + SoftwareConnection connection; + SoftwareConnection::Status status; std::thread thread; }; struct PeerMessage { size_t peerId; - Connection::Message message; + SoftwareConnection::Message message; }; // Server