From dc78e23449bedd0baba599491e2c43c5318d2767 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 18 Nov 2019 15:16:20 +0100 Subject: [PATCH] rxr: removed slsReceiverUsers, start() and stop() --- slsReceiverSoftware/CMakeLists.txt | 5 +- .../include/{slsReceiver.h => Receiver.h} | 43 +++------ .../include/slsReceiverTCPIPInterface.h | 3 +- .../include/slsReceiverUsers.h | 92 ------------------- slsReceiverSoftware/slsReceiverUsers.doxy | 2 +- .../src/{slsReceiver.cpp => Receiver.cpp} | 43 +++------ slsReceiverSoftware/src/main.cpp | 28 ++---- slsReceiverSoftware/src/multiReceiver.cpp | 35 ++----- .../src/slsReceiverTCPIPInterface.cpp | 9 +- slsReceiverSoftware/src/slsReceiverUsers.cpp | 48 ---------- 10 files changed, 46 insertions(+), 262 deletions(-) rename slsReceiverSoftware/include/{slsReceiver.h => Receiver.h} (66%) delete mode 100755 slsReceiverSoftware/include/slsReceiverUsers.h rename slsReceiverSoftware/src/{slsReceiver.cpp => Receiver.cpp} (77%) delete mode 100755 slsReceiverSoftware/src/slsReceiverUsers.cpp diff --git a/slsReceiverSoftware/CMakeLists.txt b/slsReceiverSoftware/CMakeLists.txt index 80f38d4b8..49b0b1da1 100755 --- a/slsReceiverSoftware/CMakeLists.txt +++ b/slsReceiverSoftware/CMakeLists.txt @@ -1,8 +1,7 @@ set(SOURCES src/slsReceiverImplementation.cpp src/slsReceiverTCPIPInterface.cpp - src/slsReceiver.cpp - src/slsReceiverUsers.cpp + src/Receiver.cpp src/File.cpp src/BinaryFile.cpp src/ThreadObject.cpp @@ -60,7 +59,7 @@ endif (SLS_USE_HDF5) #What is included in slsReceiverLib? set(PUBLICHEADERS - include/slsReceiverUsers.h + include/Receiver.h ) diff --git a/slsReceiverSoftware/include/slsReceiver.h b/slsReceiverSoftware/include/Receiver.h similarity index 66% rename from slsReceiverSoftware/include/slsReceiver.h rename to slsReceiverSoftware/include/Receiver.h index a87c37d49..1e8c5a9b5 100755 --- a/slsReceiverSoftware/include/slsReceiver.h +++ b/slsReceiverSoftware/include/Receiver.h @@ -1,20 +1,10 @@ #pragma once -/********************************************//** - * @file slsReceiver.h - * @short creates the UDP and TCP class objects - ***********************************************/ - -#include - #include "slsReceiverTCPIPInterface.h" #include "sls_detector_defs.h" +#include -/** - *@short creates the UDP and TCP class objects - */ - -class slsReceiver : private virtual slsDetectorDefs { +class Receiver : private virtual slsDetectorDefs { public: /** @@ -25,7 +15,7 @@ class slsReceiver : private virtual slsDetectorDefs { * @param argc from command line * @param argv from command line */ - slsReceiver(int argc, char *argv[]); + Receiver(int argc, char *argv[]); /** * Constructor @@ -34,18 +24,7 @@ class slsReceiver : private virtual slsDetectorDefs { * throws an exception in case of failure * @param tcpip_port_no TCP/IP port number */ - slsReceiver(int tcpip_port_no = 1954); - - /** - * starts listening on the TCP port for client comminication - \return 0 for success or 1 for FAIL in creating TCP server - */ - int start(); - - /** - * stops listening to the TCP & UDP port and exit receiver program - */ - void stop(); + Receiver(int tcpip_port_no = 1954); /** * get get Receiver Version @@ -70,16 +49,16 @@ class slsReceiver : private virtual slsDetectorDefs { /** * Call back for acquisition finished * callback argument is - * total frames caught + * @param total frames caught */ void registerCallBackAcquisitionFinished(void (*func)(uint64_t, void*),void *arg); /** * Call back for raw data * args to raw data ready callback are - * sls_receiver_header frame metadata - * dataPointer is the pointer to the data - * dataSize in bytes is the size of the data in bytes. + * @param sls_receiver_header frame metadata + * @param dataPointer is the pointer to the data + * @param dataSize in bytes is the size of the data in bytes. */ void registerCallBackRawDataReady(void (*func)(char* , char*, uint32_t, void*),void *arg); @@ -87,9 +66,9 @@ class slsReceiver : private virtual slsDetectorDefs { /** * Call back for raw data (modified) * args to raw data ready callback are - * sls_receiver_header frame metadata - * dataPointer is the pointer to the data - * revDatasize is the reference of data size in bytes. + * @param sls_receiver_header frame metadata + * @param dataPointer is the pointer to the data + * @param revDatasize is the reference of data size in bytes. * Can be modified to the new size to be written/streamed. (only smaller value). */ void registerCallBackRawDataModifyReady(void (*func)(char* , diff --git a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h index 92c6efd63..c28c524b9 100755 --- a/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h +++ b/slsReceiverSoftware/include/slsReceiverTCPIPInterface.h @@ -37,9 +37,8 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs { /** * Starts listening on the TCP port for client comminication - \returns OK or FAIL */ - int start(); + void start(); /** stop listening on the TCP & UDP port for client comminication */ void stop(); diff --git a/slsReceiverSoftware/include/slsReceiverUsers.h b/slsReceiverSoftware/include/slsReceiverUsers.h deleted file mode 100755 index 76c939db7..000000000 --- a/slsReceiverSoftware/include/slsReceiverUsers.h +++ /dev/null @@ -1,92 +0,0 @@ -#pragma once - -#include -#include - -#include - -#include "slsReceiver.h" - - /** -@short Class for implementing the SLS data receiver in the users application. Callbacks can be defined for processing and/or saving data - - slsReceiverUsers is a class that can be instantiated in the users software to receive the data from the detectors. Callbacks can be defined for processing and/or saving data - ***********************************************/ - -class slsReceiverUsers { - -public: - /** - * Constructor - * reads config file, creates socket, assigns function table - * @param argc from command line - * @param argv from command line - * @param success socket creation was successfull - */ - slsReceiverUsers(int argc, char *argv[], int &success); - - /** - * Constructor - * reads config file, creates socket, assigns function table - * @param tcpip_port_no TCP/IP port - * @throws - */ - slsReceiverUsers(int tcpip_port_no = 1954); - - /** - * starts listening on the TCP port for client comminication - \return 0 for success or 1 for FAIL in creating TCP server - */ - int start(); - - /** stops listening to the TCP & UDP port and exit receiver program*/ - void stop(); - - /** - get get Receiver Version - \returns id - */ - int64_t getReceiverVersion(); - - /** - - @short register calbback for starting the acquisition - \param func callback to be called when starting the acquisition. Its arguments are filepath, filename, fileindex, datasize - \param arg argument - \return value is insignificant at the moment, we write depending on file write enable, users get data to write depending on call backs registered - */ - void registerCallBackStartAcquisition(int (*func)(std::string filepath, std::string filename, uint64_t fileindex, uint32_t datasize, void*),void *arg); - - - /** - @short register callback for end of acquisition - \param func end of acquisition callback. Argument nf is total frames caught - \param arg argument - \returns nothing - */ - void registerCallBackAcquisitionFinished(void (*func)(uint64_t nf, void*),void *arg); - - - - /** - @short register callback to be called when data are available (to process and/or save the data). - \param func raw data ready callback. arguments are sls_receiver_header, dataPointer, dataSize - \param arg argument - \returns nothing - */ - void registerCallBackRawDataReady(void (*func)(char* header, - char* datapointer, uint32_t datasize, void*),void *arg); - - - /** - @short register callback to be called when data are available (to process and/or save the data). - \param func raw data ready callback. arguments are sls_receiver_header, dataPointer, revDatasize is the reference of data size in bytes. Can be modified to the new size to be written/streamed. (only smaller value). - \param arg argument - \returns nothing - */ - void registerCallBackRawDataModifyReady(void (*func)(char* header, - char* datapointer, uint32_t &revDatasize, void*),void *arg); - - //receiver object - std::unique_ptr receiver; -}; diff --git a/slsReceiverSoftware/slsReceiverUsers.doxy b/slsReceiverSoftware/slsReceiverUsers.doxy index 8c91db014..acf75c70e 100755 --- a/slsReceiverSoftware/slsReceiverUsers.doxy +++ b/slsReceiverSoftware/slsReceiverUsers.doxy @@ -81,6 +81,6 @@ LATEX_HIDE_INDICES = YES PREDEFINED = __cplusplus -INPUT = include/slsReceiverUsers.h +INPUT = include/Receiver.h OUTPUT_DIRECTORY = slsReceiverUsersDocs diff --git a/slsReceiverSoftware/src/slsReceiver.cpp b/slsReceiverSoftware/src/Receiver.cpp similarity index 77% rename from slsReceiverSoftware/src/slsReceiver.cpp rename to slsReceiverSoftware/src/Receiver.cpp index da2b47f93..a40aedccc 100755 --- a/slsReceiverSoftware/src/slsReceiver.cpp +++ b/slsReceiverSoftware/src/Receiver.cpp @@ -1,7 +1,9 @@ -/********************************************//** - * @file slsReceiver.cpp - * @short creates the UDP and TCP class objects - ***********************************************/ +#include "Receiver.h" +#include "slsReceiverTCPIPInterface.h" +#include "sls_detector_exceptions.h" +#include "versionAPI.h" +#include "container_utils.h" +#include "logger.h" #include #include @@ -11,15 +13,7 @@ #include #include -#include "container_utils.h" // For sls::make_unique<> - -#include "logger.h" -#include "slsReceiver.h" -#include "slsReceiverTCPIPInterface.h" -#include "sls_detector_exceptions.h" -#include "versionAPI.h" - -slsReceiver::slsReceiver(int argc, char *argv[]): +Receiver::Receiver(int argc, char *argv[]): tcpipInterface (nullptr) { // options @@ -81,47 +75,36 @@ slsReceiver::slsReceiver(int argc, char *argv[]): } -slsReceiver::slsReceiver(int tcpip_port_no) +Receiver::Receiver(int tcpip_port_no) { // might throw an exception tcpipInterface = sls::make_unique(tcpip_port_no); } - -int slsReceiver::start() { - return tcpipInterface->start(); -} - - -void slsReceiver::stop() { - tcpipInterface->stop(); -} - - -int64_t slsReceiver::getReceiverVersion(){ +int64_t Receiver::getReceiverVersion(){ return tcpipInterface->getReceiverVersion(); } -void slsReceiver::registerCallBackStartAcquisition(int (*func)( +void Receiver::registerCallBackStartAcquisition(int (*func)( std::string, std::string, uint64_t, uint32_t, void*),void *arg){ tcpipInterface->registerCallBackStartAcquisition(func,arg); } -void slsReceiver::registerCallBackAcquisitionFinished( +void Receiver::registerCallBackAcquisitionFinished( void (*func)(uint64_t, void*),void *arg){ tcpipInterface->registerCallBackAcquisitionFinished(func,arg); } -void slsReceiver::registerCallBackRawDataReady(void (*func)(char*, +void Receiver::registerCallBackRawDataReady(void (*func)(char*, char*, uint32_t, void*),void *arg){ tcpipInterface->registerCallBackRawDataReady(func,arg); } -void slsReceiver::registerCallBackRawDataModifyReady(void (*func)(char*, +void Receiver::registerCallBackRawDataModifyReady(void (*func)(char*, char*, uint32_t &, void*),void *arg){ tcpipInterface->registerCallBackRawDataModifyReady(func,arg); } diff --git a/slsReceiverSoftware/src/main.cpp b/slsReceiverSoftware/src/main.cpp index fa2f73e49..bc05f7de2 100755 --- a/slsReceiverSoftware/src/main.cpp +++ b/slsReceiverSoftware/src/main.cpp @@ -2,8 +2,9 @@ The port number is passed as an argument */ #include "logger.h" -#include "slsReceiverUsers.h" +#include "Receiver.h" #include "sls_detector_defs.h" +#include "container_utils.h" #include //SIGINT #include //system @@ -13,7 +14,7 @@ #include //wait #include #include //usleep - +#include bool keeprunning; @@ -88,16 +89,14 @@ int main(int argc, char *argv[]) { FILE_LOG(logERROR) << "Could not set handler function for SIGPIPE"; } - - int ret = slsDetectorDefs::OK; - slsReceiverUsers *receiver = new slsReceiverUsers(argc, argv, ret); - if(ret==slsDetectorDefs::FAIL){ - delete receiver; + std::unique_ptr receiver = nullptr; + try { + receiver = sls::make_unique(argc, argv); + } catch (...) { FILE_LOG(logINFOBLUE) << "Exiting [ Tid: " << syscall(SYS_gettid) << " ]"; - exit(EXIT_FAILURE); + throw; } - //register callbacks /** @@ -137,21 +136,10 @@ int main(int argc, char *argv[]) { */ //receiver->registerCallBackRawDataReady(rawDataReadyCallBack,NULL); - - - //start tcp server thread - if (receiver->start() == slsDetectorDefs::FAIL){ - delete receiver; - FILE_LOG(logINFOBLUE) << "Exiting [ Tid: " << syscall(SYS_gettid) << " ]"; - exit(EXIT_FAILURE); - } - FILE_LOG(logINFO) << "Ready ... "; FILE_LOG(logINFO) << "[ Press \'Ctrl+c\' to exit ]"; while(keeprunning) pause(); - - delete receiver; FILE_LOG(logINFOBLUE) << "Exiting [ Tid: " << syscall(SYS_gettid) << " ]"; FILE_LOG(logINFO) << "Exiting Receiver"; return 0; diff --git a/slsReceiverSoftware/src/multiReceiver.cpp b/slsReceiverSoftware/src/multiReceiver.cpp index fa9ecbd49..fb0882791 100755 --- a/slsReceiverSoftware/src/multiReceiver.cpp +++ b/slsReceiverSoftware/src/multiReceiver.cpp @@ -1,7 +1,7 @@ /** \file mainReceiver.cpp -This file is an example of how to implement the slsReceiverUsers class +This file is an example of how to implement the Receiver class You can compile it linking it to the slsReceiver library g++ mainReceiver.cpp -L lib -lSlsReceiver -L/usr/lib64/ -L lib2 -lzmq -pthread -lrt -lm -lstdc++ @@ -17,14 +17,12 @@ It is linked in manual/manual-api from slsReceiverSoftware/include ] */ #include "sls_detector_defs.h" -#include "slsReceiverUsers.h" +#include "Receiver.h" #include //SIGINT -#include //system +#include //system #include #include -//#include "utilities.h" -//#include "logger.h" #include #include #include //wait @@ -155,7 +153,7 @@ void GetData(char* metadata, char* datapointer, uint32_t &revDatasize, void* p){ /** - * Example of main program using the slsReceiverUsers class + * Example of main program using the Receiver class * * - Defines in file for: * - Default Number of receivers is 1 @@ -214,18 +212,8 @@ int main(int argc, char *argv[]) { /** - if child process */ else if (pid == 0) { cprintf(BLUE,"Child process %d [ Tid: %ld ]\n", i, (long)syscall(SYS_gettid)); - - char temp[10]; - sprintf(temp,"%d",startTCPPort + i); - char* args[] = {(char*)"ignored", (char*)"--rx_tcpport", temp}; - int ret = slsDetectorDefs::OK; - /** - create slsReceiverUsers object with appropriate arguments */ - slsReceiverUsers *receiver = new slsReceiverUsers(3, args, ret); - if(ret==slsDetectorDefs::FAIL){ - delete receiver; - exit(EXIT_FAILURE); - } - + + Receiver *receiver = new Receiver(startTCPPort + i); /** - register callbacks. remember to set file write enable to 0 (using the client) if we should not write files and you will write data using the callbacks */ @@ -245,19 +233,10 @@ int main(int argc, char *argv[]) { else if (withCallback == 2) receiver->registerCallBackRawDataModifyReady(GetData,nullptr); } - - - /** - start tcp server thread */ - if (receiver->start() == slsDetectorDefs::FAIL){ - delete receiver; - cprintf(BLUE,"Exiting Child Process [ Tid: %ld ]\n", (long)syscall(SYS_gettid)); - exit(EXIT_FAILURE); - } - /** - as long as keeprunning is true (changes with Ctrl+C) */ while(keeprunning) pause(); - /** - interrupt caught, delete slsReceiverUsers object and exit */ + /** - interrupt caught, delete Receiver object and exit */ delete receiver; cprintf(BLUE,"Exiting Child Process [ Tid: %ld ]\n", (long)syscall(SYS_gettid)); exit(EXIT_SUCCESS); diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index d296b5c4f..80c84ebec 100755 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -8,9 +8,7 @@ #include "slsReceiverTCPIPInterface.h" #include "FixedCapacityContainer.h" #include "ServerSocket.h" -#include "slsReceiver.h" #include "slsReceiverImplementation.h" -#include "slsReceiverUsers.h" #include "sls_detector_exceptions.h" #include "string_utils.h" #include "versionAPI.h" @@ -35,19 +33,18 @@ slsReceiverTCPIPInterface::~slsReceiverTCPIPInterface() { stop(); } slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int pn) : myDetectorType(GOTTHARD), portNumber(pn > 0 ? pn : DEFAULT_PORTNO + 2) { function_table(); + start(); } -int slsReceiverTCPIPInterface::start() { +void slsReceiverTCPIPInterface::start() { FILE_LOG(logDEBUG) << "Creating TCP Server Thread"; killTCPServerThread = 0; if (pthread_create(&TCPServer_thread, nullptr, startTCPServerThread, (void *)this)) { - FILE_LOG(logERROR) << "Could not create TCP Server thread"; - return FAIL; + throw RuntimeError("Could not create TCP Server thread"); } tcpThreadCreated = true; FILE_LOG(logDEBUG) << "TCP Server thread created successfully."; - return OK; } void slsReceiverTCPIPInterface::stop() { diff --git a/slsReceiverSoftware/src/slsReceiverUsers.cpp b/slsReceiverSoftware/src/slsReceiverUsers.cpp deleted file mode 100755 index d0d4ba1fd..000000000 --- a/slsReceiverSoftware/src/slsReceiverUsers.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#include "container_utils.h" // For sls::make_unique<> - -#include "slsReceiverUsers.h" - -slsReceiverUsers::slsReceiverUsers(int argc, char *argv[], int &success) { - // catch the exception here to limit it to within the library (for current version) - try { - receiver = sls::make_unique(argc, argv); - success = slsDetectorDefs::OK; - } catch (...) { - success = slsDetectorDefs::FAIL; - } -} - -slsReceiverUsers::slsReceiverUsers(int tcpip_port_no) { - receiver = sls::make_unique(tcpip_port_no); -} - -int slsReceiverUsers::start() { - return receiver->start(); -} - -void slsReceiverUsers::stop() { - receiver->stop(); -} - -int64_t slsReceiverUsers::getReceiverVersion(){ - return receiver->getReceiverVersion(); -} - -void slsReceiverUsers::registerCallBackStartAcquisition(int (*func)(std::string, std::string, uint64_t, uint32_t, void*),void *arg){ - receiver->registerCallBackStartAcquisition(func,arg); -} - -void slsReceiverUsers::registerCallBackAcquisitionFinished(void (*func)(uint64_t, void*),void *arg){ - receiver->registerCallBackAcquisitionFinished(func,arg); -} - -void slsReceiverUsers::registerCallBackRawDataReady(void (*func)(char* header, - char* datapointer, uint32_t datasize, void*), void *arg){ - receiver->registerCallBackRawDataReady(func,arg); -} - -void slsReceiverUsers::registerCallBackRawDataModifyReady(void (*func)(char* header, - char* datapointer, uint32_t& revDatasize, void*), void *arg){ - receiver->registerCallBackRawDataModifyReady(func,arg); -} -