/* * Copyright 2016 * * ReceiverThreads.cpp * * Created on: 21.07.2016 * Author: Tobias Frust */ #include "ReceiverThreads.h" #include "../UDPServer/UDPServer.h" #include ReceiverThreads::ReceiverThreads(const std::string& address, const int timeIntervall, const int numberOfDetectorModules) : timeIntervall_{timeIntervall}, numberOfDetectorModules_{numberOfDetectorModules}, address_{address}, loss_{0} { for(auto i = 0; i < numberOfDetectorModules; i++){ receiverModules_.emplace_back(&ReceiverThreads::receiverThread, this, 4000+i); } for(auto i = 0; i < numberOfDetectorModules; i++){ receiverModules_[i].join(); } } auto ReceiverThreads::receiverThread(const int port) -> void { UDPServer server = UDPServer(address_, port); std::vector buf(33000); std::size_t lastIndex{0}; BOOST_LOG_TRIVIAL(info) << "Address: " << address_ << " port: " << port << " timeout: " << timeIntervall_; while(true){ int bytes = server.timed_recv((char*)buf.data(), 65536, timeIntervall_); if(bytes < 0){ break; } BOOST_LOG_TRIVIAL(debug) << "Received " << bytes << " Bytes."; std::size_t index = *((std::size_t *)buf.data()); int diff = index - lastIndex - 1; if(diff > 0){ loss_ += diff; BOOST_LOG_TRIVIAL(debug) << "Packet loss or wrong order! new: " << index << " old: " << lastIndex; } lastIndex = index; } BOOST_LOG_TRIVIAL(info) << "Lost " << loss_ << " from " << lastIndex << " packets; (" << loss_/(double)lastIndex << "%)"; }