From d71e5fe7330fa51cdce466ec0df876eb9b8e721e Mon Sep 17 00:00:00 2001
From: Tobias Frust <tobiasfrust@gmail.com>
Date: Mon, 11 Jul 2016 14:58:00 +0200
Subject: UDP packets are sent out correctly

---
 src/Detector/Detector.cpp             |  2 +-
 src/DetectorModule/DetectorModule.cpp | 36 ++++++++++++++++++-----------------
 src/main_client.cpp                   |  4 ++--
 src/main_server.cpp                   |  6 ++++++
 4 files changed, 28 insertions(+), 20 deletions(-)

(limited to 'src')

diff --git a/src/Detector/Detector.cpp b/src/Detector/Detector.cpp
index 658f485..5dde6d1 100644
--- a/src/Detector/Detector.cpp
+++ b/src/Detector/Detector.cpp
@@ -14,7 +14,7 @@ Detector::Detector(const std::string& address, const std::string& configPath, co
    timeIntervall_{timeIntervall},
    numberOfDetectorModules_{27} {
    modules_.reserve(numberOfDetectorModules_);
-   for(auto i = 1; i <= numberOfDetectorModules_; i++){
+   for(auto i = 0; i < numberOfDetectorModules_; i++){
       modules_.emplace_back(i, address, configPath);
    }
 }
diff --git a/src/DetectorModule/DetectorModule.cpp b/src/DetectorModule/DetectorModule.cpp
index 789ac0e..bee50e9 100644
--- a/src/DetectorModule/DetectorModule.cpp
+++ b/src/DetectorModule/DetectorModule.cpp
@@ -54,8 +54,10 @@ auto DetectorModule::send() -> void{
 //   sendBuffer_[5] = (sizeof(std::size_t) >> 40) & 0xff;
 //   sendBuffer_[6] = (sizeof(std::size_t) >> 48) & 0xff;
 //   sendBuffer_[7] = (sizeof(std::size_t) >> 56) & 0xff;
+   unsigned int bufferSizeIndex = index_ % 1000;
+   unsigned int sinoSize = numberOfDetectorsPerModule_*numberOfProjections_;
    *reinterpret_cast<int*>(sendBuffer_.data()) = index_;
-   std::copy(buffer_.cbegin(), buffer_.cbegin()+numberOfDetectorsPerModule_*numberOfProjections_, sendBuffer_.begin()+sizeof(std::size_t));
+   std::copy(((char*)buffer_.data())+sinoSize*bufferSizeIndex*sizeof(unsigned short), ((char*)buffer_.data())+(sinoSize*(1+bufferSizeIndex))*sizeof(unsigned short), sendBuffer_.begin()+sizeof(std::size_t));
    client_.send(sendBuffer_.data(), sizeof(unsigned short)*numberOfDetectorsPerModule_*numberOfProjections_+sizeof(std::size_t));
    ++index_;
 }
@@ -71,7 +73,7 @@ auto DetectorModule::readInput() -> void {
    if(path_.back() != '/')
       path_.append("/");
    //open file
-   const std::string filePath = path_ + fileName_ + std::to_string(detectorID_) + fileEnding_;
+   const std::string filePath = path_ + fileName_ + std::to_string(detectorID_+1) + fileEnding_;
    BOOST_LOG_TRIVIAL(debug) << "DetectorModule: Path = " << filePath;
    std::ifstream input(filePath, std::ios::in | std::ios::binary);
    if(input){
@@ -88,20 +90,20 @@ auto DetectorModule::readInput() -> void {
 }
 
 auto DetectorModule::readConfig(const std::string& configFile) -> bool {
-     ConfigReader configReader = ConfigReader(configFile.data());
-     int samplingRate, scanRate;
-     if (configReader.lookupValue("numberOfFanDetectors", numberOfDetectors_)
-           && configReader.lookupValue("dataInputPath", path_)
-           && configReader.lookupValue("dataFileName", fileName_)
-           && configReader.lookupValue("dataFileEnding", fileEnding_)
-           && configReader.lookupValue("numberOfPlanes", numberOfPlanes_)
-           && configReader.lookupValue("samplingRate", samplingRate)
-           && configReader.lookupValue("scanRate", scanRate)
-           && configReader.lookupValue("numberOfDataFrames", numberOfFrames_)) {
-        numberOfProjections_ = samplingRate * 1000000 / scanRate;
-        return EXIT_SUCCESS;
-     }
-
-     return EXIT_FAILURE;
+  ConfigReader configReader = ConfigReader(configFile.data());
+  int samplingRate, scanRate;
+  if (configReader.lookupValue("numberOfFanDetectors", numberOfDetectors_)
+        && configReader.lookupValue("dataInputPath", path_)
+        && configReader.lookupValue("dataFileName", fileName_)
+        && configReader.lookupValue("dataFileEnding", fileEnding_)
+        && configReader.lookupValue("numberOfPlanes", numberOfPlanes_)
+        && configReader.lookupValue("samplingRate", samplingRate)
+        && configReader.lookupValue("scanRate", scanRate)
+        && configReader.lookupValue("numberOfDataFrames", numberOfFrames_)) {
+     numberOfProjections_ = samplingRate * 1000000 / scanRate;
+     return EXIT_SUCCESS;
   }
 
+  return EXIT_FAILURE;
+}
+
diff --git a/src/main_client.cpp b/src/main_client.cpp
index ed7d285..b88341a 100644
--- a/src/main_client.cpp
+++ b/src/main_client.cpp
@@ -24,9 +24,9 @@ int main (int argc, char *argv[]){
   std::cout << "Sending UDP packages: " << std::endl;
 
   auto configPath = std::string { "config.cfg" };
-  std::string address = "localhost";
+  std::string address = "127.0.0.1";
 
-  Detector detector{address, configPath, 1000u};
+  Detector detector{address, configPath, 1000000u};
 
   //DetectorModule detModule0 = DetectorModule(1, address, configPath);
 
diff --git a/src/main_server.cpp b/src/main_server.cpp
index a645f49..6e936e4 100644
--- a/src/main_server.cpp
+++ b/src/main_server.cpp
@@ -35,6 +35,7 @@ int main (int argc, char *argv[]){
    UDPServer server = UDPServer(address, port);
 
    std::size_t length{32768};
+   std::size_t lastIndex{0};
 
    std::vector<unsigned short> buf(16000);
 
@@ -52,6 +53,11 @@ int main (int argc, char *argv[]){
      std::size_t index = *((std::size_t *)buf.data());
      if(index%1000 == 99) printf("%lu\n", index);
 
+     if(lastIndex != (index-1))
+        BOOST_LOG_TRIVIAL(warning) << "Packet loss or wrong order!";
+
+     lastIndex = index;
+
      BOOST_LOG_TRIVIAL(debug) << "Server: Received " << bytes << " Bytes with Index " << index;
    }
 
-- 
cgit v1.2.3