From 8da76f6d1e3eb6393cfe53c75f96e0cb93285cd2 Mon Sep 17 00:00:00 2001 From: Joakim Kilby Date: Tue, 16 Jun 2015 16:37:07 +0200 Subject: [PATCH] added message specific decoding functions --- .../openspace/network/osparallelconnection.h | 14 +++- src/network/osparallelconnection.cpp | 76 ++++++++++++++++++- 2 files changed, 87 insertions(+), 3 deletions(-) diff --git a/include/openspace/network/osparallelconnection.h b/include/openspace/network/osparallelconnection.h index 0721ef96fd..d6a8b101b5 100644 --- a/include/openspace/network/osparallelconnection.h +++ b/include/openspace/network/osparallelconnection.h @@ -96,7 +96,7 @@ namespace openspace{ Initialization, Data, HostInfo, - InitRequest + InitializationRequest }; /** @@ -141,6 +141,18 @@ namespace openspace{ void communicate(); + void delegateDecoding(int type); + + void decodeAuthenticationMessage(); + + void decodeInitializationMessage(); + + void decodeDataMessage(); + + void decodeHostInfoMessage(); + + void decodeInitializationRequestMessage(); + int receiveData(_SOCKET & socket, std::vector &buffer, int length, int flags); uint32_t _passCode; diff --git a/src/network/osparallelconnection.cpp b/src/network/osparallelconnection.cpp index 8376a75cd0..6370581967 100644 --- a/src/network/osparallelconnection.cpp +++ b/src/network/osparallelconnection.cpp @@ -59,6 +59,8 @@ const int headerSize = 8; #include #include +#include +#include #include "osparallelconnection_lua.inl" @@ -207,7 +209,7 @@ namespace openspace { buffer.insert(buffer.end(), 0); //msg type, 0 = auth - int type = 0; + int type = MessageTypes::Authentication; buffer.insert(buffer.end(), reinterpret_cast(&type), reinterpret_cast(&type) + sizeof(int)); //passcode @@ -227,6 +229,67 @@ namespace openspace { } } + void OSParallelConnection::delegateDecoding(int type){ + switch (type){ + case MessageTypes::Authentication: + decodeAuthenticationMessage(); + break; + case MessageTypes::Initialization: + decodeInitializationMessage(); + break; + case MessageTypes::Data: + decodeDataMessage(); + break; + case MessageTypes::HostInfo: + decodeHostInfoMessage(); + break; + case MessageTypes::InitializationRequest: + decodeInitializationRequestMessage(); + break; + default: + //unknown message type + break; + } + } + + void OSParallelConnection::decodeAuthenticationMessage(){ + printf("Auth OK!\n"); //more stuff here later + } + + void OSParallelConnection::decodeInitializationMessage(){ + printf("Init message received!\n"); + } + + void OSParallelConnection::decodeDataMessage(){ + printf("Data message received!\n"); + } + + void OSParallelConnection::decodeHostInfoMessage(){ + std::vector hostflag; + hostflag.resize(1); + int result = receiveData(_clientSocket, hostflag, 1, 0); + + if (result > 0){ + if (hostflag.at(0) == 1){ + printf("IM MASTER!\n"); + _isHost.store(true); + } + else{ + printf("IM A SLAVE!\n"); + _isHost.store(false); + } + + } + else{ + std::cerr << "Error " << _ERRNO << " detected in connection!" << std::endl; + disconnect(); + } + } + + void OSParallelConnection::decodeInitializationRequestMessage(){ + printf("InitRequest message received!\n"); + } + void OSParallelConnection::communicate(){ std::vector buffer; @@ -237,7 +300,16 @@ namespace openspace { result = receiveData(_clientSocket, buffer, headerSize, 0); if (result > 0){ - int i = 0; + if (buffer[0] == 'O' && //Open + buffer[1] == 'S' && //Space + buffer[2] == 0 && //version + buffer[3] == 0 //version + ) + { + //parse type + int type = (*(reinterpret_cast(&buffer[4]))); + delegateDecoding(type); + } } else{ if (result == 0){