Merge branch 'refactor' of github.com:slsdetectorgroup/slsDetectorPackage into refactor

This commit is contained in:
Erik Frojdh 2018-10-10 12:17:36 +02:00
commit 2cd0841ea3
10 changed files with 110 additions and 49 deletions

View File

@ -4,7 +4,7 @@ set(SOURCES
slsDetector/slsDetectorUsers.cpp slsDetector/slsDetectorUsers.cpp
slsDetector/slsDetectorCommand.cpp slsDetector/slsDetectorCommand.cpp
slsDetector/slsDetector.cpp slsDetector/slsDetector.cpp
slsReceiverInterface/receiverInterface.cpp ../slsSupportLib/include/ClientInterface.cpp
../slsSupportLib/include/utilities.cpp ../slsSupportLib/include/utilities.cpp
) )
@ -16,8 +16,6 @@ include_directories(
multiSlsDetector multiSlsDetector
sharedMemory sharedMemory
slsDetector slsDetector
slsReceiverInterface
../slsSupportLib/include
) )
add_library(slsDetectorStatic STATIC add_library(slsDetectorStatic STATIC
@ -52,7 +50,7 @@ set(PUBLICHEADERS
slsDetector/slsDetectorUsers.h slsDetector/slsDetectorUsers.h
slsDetector/detectorData.h slsDetector/detectorData.h
multiSlsDetector/multiSlsDetector.h multiSlsDetector/multiSlsDetector.h
slsReceiverInterface/receiverInterface.h ../slsSupportLib/include/ClientInterface.h
) )
set_target_properties(slsDetectorShared PROPERTIES set_target_properties(slsDetectorShared PROPERTIES
LIBRARY_OUTPUT_NAME SlsDetector LIBRARY_OUTPUT_NAME SlsDetector

View File

@ -9,14 +9,14 @@ CFLAGS= -g -DC_ONLY -fPIC
DFLAGS= -g -DDACS_INT DFLAGS= -g -DDACS_INT
INCLUDES?= -I../slsSupportLib/include -IslsDetector -ImultiSlsDetector -IslsReceiverInterface -IsharedMemory I$(ASM) INCLUDES?= -I../slsSupportLib/include -IslsDetector -ImultiSlsDetector -I../slsSupportLib/include -IsharedMemory I$(ASM)
#EPICSFLAGS=-D EPICS -I/usr/local/epics/base/include/ -I /usr/local/epics/base/include/os/Linux/ -L /usr/local/epics/base/lib/$(EPICS_HOST_ARCH) -Wl,-R/usr/local/epics/base/lib/$(EPICS_HOST_ARCH) -lca -lCom #EPICSFLAGS=-D EPICS -I/usr/local/epics/base/include/ -I /usr/local/epics/base/include/os/Linux/ -L /usr/local/epics/base/lib/$(EPICS_HOST_ARCH) -Wl,-R/usr/local/epics/base/lib/$(EPICS_HOST_ARCH) -lca -lCom
LIBZMQDIR = ../slsSupportLib/include LIBZMQDIR = ../slsSupportLib/include
LIBZMQ = -L$(LIBZMQDIR) -Wl,-rpath=$(LIBZMQDIR) -lzmq LIBZMQ = -L$(LIBZMQDIR) -Wl,-rpath=$(LIBZMQDIR) -lzmq
SRC_CLNT= slsDetector/slsDetectorCommand.cpp slsDetector/slsDetector.cpp multiSlsDetector/multiSlsDetector.cpp slsReceiverInterface/receiverInterface.cpp slsDetector/slsDetectorUsers.cpp sharedMemory/SharedMemory.cpp ../slsSupportLib/include/utilities.cpp SRC_CLNT= slsDetector/slsDetectorCommand.cpp slsDetector/slsDetector.cpp multiSlsDetector/multiSlsDetector.cpp ../slsSupportLib/include/ReceiverInterface.cpp slsDetector/slsDetectorUsers.cpp sharedMemory/SharedMemory.cpp ../slsSupportLib/include/utilities.cpp
DEPSINCLUDES = ../slsSupportLib/include/sls_receiver_defs.h ../slsSupportLib/include/sls_receiver_funcs.h ../slsSupportLib/include/ansi.h ../slsSupportLib/include/sls_detector_defs.h ../slsSupportLib/include/sls_detector_funcs.h ../slsSupportLib/include/error_defs.h slsDetector/slsDetectorBase.h slsDetector/detectorData.h sharedMemory/SharedMemory.h ../slsSupportLib/include/sls_receiver_exceptions.h ../slsSupportLib/include/versionAPI.h ../slsSupportLib/include/utilities.h ../slsSupportLib/include/container_utils.h DEPSINCLUDES = ../slsSupportLib/include/sls_receiver_defs.h ../slsSupportLib/include/sls_receiver_funcs.h ../slsSupportLib/include/ansi.h ../slsSupportLib/include/sls_detector_defs.h ../slsSupportLib/include/sls_detector_funcs.h ../slsSupportLib/include/error_defs.h slsDetector/slsDetectorBase.h slsDetector/detectorData.h sharedMemory/SharedMemory.h ../slsSupportLib/include/sls_receiver_exceptions.h ../slsSupportLib/include/versionAPI.h ../slsSupportLib/include/utilities.h ../slsSupportLib/include/container_utils.h

View File

@ -2708,6 +2708,18 @@ int multiSlsDetector::exitReceiver(int detPos) {
} }
int multiSlsDetector::execReceiverCommand(std::string cmd, int detPos) {
// single
if (detPos >= 0) {
return detectors[detPos]->execReceiverCommand(cmd);
}
// multi
auto r = parallelCall(&slsDetector::execReceiverCommand, cmd);
return sls::allEqualTo(r, static_cast<int>(OK)) ? OK : FAIL;
}
std::string multiSlsDetector::getFilePath(int detPos) { std::string multiSlsDetector::getFilePath(int detPos) {
// single // single
if (detPos >= 0) { if (detPos >= 0) {

View File

@ -1230,6 +1230,15 @@ public:
*/ */
int exitReceiver(int detPos = -1); int exitReceiver(int detPos = -1);
/**
* Executes a system command on the receiver server
* e.g. mount an nfs disk, reboot and returns answer etc.
* @param cmd command to be executed
* @param detPos -1 for all detectors in list or specific detector position
* @returns OK or FAIL
*/
int execReceiverCommand(std::string cmd, int detPos = -1);
/** /**
* Returns output file directory * Returns output file directory
* @param detPos -1 for all detectors in list or specific detector position * @param detPos -1 for all detectors in list or specific detector position

View File

@ -2,7 +2,7 @@
#include "multiSlsDetector.h" #include "multiSlsDetector.h"
#include "sls_receiver_exceptions.h" #include "sls_receiver_exceptions.h"
#include "SharedMemory.h" #include "SharedMemory.h"
#include "receiverInterface.h" #include "ClientInterface.h"
#include "gitInfoLib.h" #include "gitInfoLib.h"
#include "versionAPI.h" #include "versionAPI.h"
#include "slsDetectorCommand.h" #include "slsDetectorCommand.h"
@ -590,7 +590,7 @@ void slsDetector::initializeMembers() {
delete thisReceiver; delete thisReceiver;
thisReceiver = 0; thisReceiver = 0;
} }
thisReceiver = new receiverInterface(dataSocket); thisReceiver = new ClientInterface(dataSocket);
} }
@ -3928,7 +3928,7 @@ std::string slsDetector::setReceiverStreamingIP(std::string sourceIP) {
std::endl; std::endl;
#endif #endif
if (connectData() == OK){ if (connectData() == OK){
ret=thisReceiver->sendString(fnum,retval,arg); ret=thisReceiver->SendString(fnum,retval,arg);
disconnectData(); disconnectData();
} }
if(ret==FAIL) { if(ret==FAIL) {
@ -3960,7 +3960,7 @@ std::string slsDetector::setAdditionalJsonHeader(std::string jsonheader) {
std::cout << "Sending additional json header " << arg << std::endl; std::cout << "Sending additional json header " << arg << std::endl;
#endif #endif
if (connectData() == OK){ if (connectData() == OK){
ret=thisReceiver->sendString(fnum,retval,arg); ret=thisReceiver->SendString(fnum,retval,arg);
disconnectData(); disconnectData();
} }
if(ret==FAIL) { if(ret==FAIL) {
@ -5894,7 +5894,7 @@ int slsDetector::setReceiverTCPSocket(std::string const name, int const receiver
//check if it connects //check if it connects
if (retval!=FAIL) { if (retval!=FAIL) {
checkReceiverOnline(); checkReceiverOnline();
thisReceiver->setSocket(dataSocket); thisReceiver->SetSocket(dataSocket);
// check for version compatibility // check for version compatibility
switch (thisDetector->myDetectorType) { switch (thisDetector->myDetectorType) {
case EIGER: case EIGER:
@ -5990,6 +5990,30 @@ int slsDetector::exitReceiver() {
} }
int slsDetector::execReceiverCommand(std::string cmd) {
int fnum=F_EXEC_RECEIVER_COMMAND;
int ret=FAIL;
char arg[MAX_STR_LENGTH];
memset(arg,0,sizeof(arg));
char retval[MAX_STR_LENGTH];
memset(retval,0, sizeof(retval));
strcpy(arg,cmd.c_str());
if (thisDetector->receiverOnlineFlag==ONLINE_FLAG) {
#ifdef VERBOSE
std::cout << "Sending to receiver the command: " << arg << std::endl;
#endif
if (connectData() == OK){
ret=thisReceiver->SendString(fnum,retval,arg);
disconnectData();
}
}
return ret;
}
int slsDetector::updateReceiverNoWait() { int slsDetector::updateReceiverNoWait() {
@ -6168,7 +6192,7 @@ void slsDetector::setDetectorHostname() {
thisDetector->hostname << std::endl; thisDetector->hostname << std::endl;
#endif #endif
if (connectData() == OK){ if (connectData() == OK){
ret=thisReceiver->sendString(fnum,retval,thisDetector->hostname); ret=thisReceiver->SendString(fnum,retval,thisDetector->hostname);
disconnectData(); disconnectData();
} }
if((ret==FAIL) || (strcmp(retval,thisDetector->hostname))) if((ret==FAIL) || (strcmp(retval,thisDetector->hostname)))
@ -6199,7 +6223,7 @@ std::string slsDetector::setFilePath(std::string s) {
std::cout << "Sending file path to receiver " << arg << std::endl; std::cout << "Sending file path to receiver " << arg << std::endl;
#endif #endif
if (connectData() == OK){ if (connectData() == OK){
ret=thisReceiver->sendString(fnum,retval,arg); ret=thisReceiver->SendString(fnum,retval,arg);
disconnectData(); disconnectData();
} }
if(ret!=FAIL){ if(ret!=FAIL){
@ -6240,7 +6264,7 @@ std::string slsDetector::setFileName(std::string s) {
std::cout << "Sending file name to receiver " << arg << std::endl; std::cout << "Sending file name to receiver " << arg << std::endl;
#endif #endif
if (connectData() == OK){ if (connectData() == OK){
ret=thisReceiver->sendString(fnum,retval,arg); ret=thisReceiver->SendString(fnum,retval,arg);
disconnectData(); disconnectData();
} }
if (ret == FAIL) if (ret == FAIL)
@ -7506,3 +7530,5 @@ int slsDetector::writeSettingsFile(std::string fname, sls_detector_module mod,
} }

View File

@ -14,7 +14,7 @@
class multiSlsDetector; class multiSlsDetector;
class SharedMemory; class SharedMemory;
class receiverInterface; class ClientInterface;
#define SLS_SHMVERSION 0x181005 #define SLS_SHMVERSION 0x181005
#define NCHIPSMAX 10 #define NCHIPSMAX 10
@ -1377,6 +1377,14 @@ public:
*/ */
int exitReceiver(); int exitReceiver();
/**
* Executes a system command on the receiver server
* e.g. mount an nfs disk, reboot and returns answer etc.
* @param cmd command to be executed
* @returns OK or FAIL
*/
int execReceiverCommand(std::string cmd);
/** /**
updates the shared memory receiving the data from the detector (without asking and closing the connection updates the shared memory receiving the data from the detector (without asking and closing the connection
/returns OK /returns OK
@ -1884,7 +1892,7 @@ private:
sharedSlsDetector *thisDetector; sharedSlsDetector *thisDetector;
/** receiver interface */ /** receiver interface */
receiverInterface *thisReceiver; ClientInterface *thisReceiver;
/** socket for control commands */ /** socket for control commands */
MySocketTCP *controlSocket; MySocketTCP *controlSocket;

View File

@ -112,6 +112,13 @@ slsDetectorCommand::slsDetectorCommand(multiSlsDetector *det) {
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdExitServer; descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdExitServer;
++i; ++i;
/*! \page test
- <b>rx_execcommand</b> Executes a command on the receiver server. Don't use it!!!!
*/
descrToFuncMap[i].m_pFuncName="rx_execcommand";//OK
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdExitServer;
++i;
/*! \page test /*! \page test
- <b>flippeddatay [i]</b> enables/disables data being flipped across y axis. 1 enables, 0 disables. Not implemented. - <b>flippeddatay [i]</b> enables/disables data being flipped across y axis. 1 enables, 0 disables. Not implemented.
*/ */
@ -2437,7 +2444,13 @@ string slsDetectorCommand::cmdExitServer(int narg, char *args[], int action, int
if(myDet->execCommand(std::string(args[1]), detPos)==OK) if(myDet->execCommand(std::string(args[1]), detPos)==OK)
return string("Command executed successfully\n"); return string("Command executed successfully\n");
else else
return string("Command failed\n");
}
else if (cmd=="rx_execcommand"){
myDet->setReceiverOnline(ONLINE_FLAG, detPos);
if(myDet->execReceiverCommand(std::string(args[1]), detPos)==OK)
return string("Command executed successfully\n");
else
return string("Command failed\n"); return string("Command failed\n");
} }
else return("cannot decode command\n"); else return("cannot decode command\n");
@ -2451,6 +2464,7 @@ string slsDetectorCommand::helpExitServer(int action){
os << string("exitserver \t shuts down all the detector servers. Don't use it!!!!\n"); os << string("exitserver \t shuts down all the detector servers. Don't use it!!!!\n");
os << string("exitreceiver \t shuts down all the receiver servers.\n"); os << string("exitreceiver \t shuts down all the receiver servers.\n");
os << string("execcommand \t executes command in detector server. Don't use it if you do not know what you are doing.\n"); os << string("execcommand \t executes command in detector server. Don't use it if you do not know what you are doing.\n");
os << string("rx_execcommand \t executes command in receiver server. Don't use it if you do not know what you are doing.\n");
return os.str(); return os.str();
} }

View File

@ -426,7 +426,7 @@ int slsReceiverTCPIPInterface::exec_command() {
sysret=system(cmd); sysret=system(cmd);
//should be replaced by popen //should be replaced by popen
if (sysret == 0) { if (sysret == 0) {
sprintf(mess,"Succeeded\n"); ret = OK;
} else { } else {
ret = FAIL; ret = FAIL;
sprintf(mess,"Executing Command failed\n"); sprintf(mess,"Executing Command failed\n");
@ -436,6 +436,7 @@ int slsReceiverTCPIPInterface::exec_command() {
// send answer // send answer
mySock->SendDataOnly(&ret,sizeof(ret)); mySock->SendDataOnly(&ret,sizeof(ret));
if (ret == FAIL)
mySock->SendDataOnly(mess,MAX_STR_LENGTH); mySock->SendDataOnly(mess,MAX_STR_LENGTH);
// return ok/fail // return ok/fail

View File

@ -1,4 +1,4 @@
#include "receiverInterface.h" #include "ClientInterface.h"
#include <sys/types.h> #include <sys/types.h>
@ -11,15 +11,15 @@
receiverInterface::receiverInterface(MySocketTCP *socket):dataSocket(socket){} ClientInterface::ClientInterface(MySocketTCP *socket):dataSocket(socket){}
receiverInterface::~receiverInterface(){} ClientInterface::~ClientInterface(){}
int receiverInterface::sendString(int fnum, char retval[], char arg[]){ int ClientInterface::SendString(int fnum, char retval[], char arg[]){
int ret = slsDetectorDefs::FAIL; int ret = slsDetectorDefs::FAIL;
char mess[MAX_STR_LENGTH]; char mess[MAX_STR_LENGTH];
memset(mess, 0, MAX_STR_LENGTH); memset(mess, 0, MAX_STR_LENGTH);
@ -39,7 +39,7 @@ int receiverInterface::sendString(int fnum, char retval[], char arg[]){
int receiverInterface::sendUDPDetails(int fnum, char retval[], char arg[3][MAX_STR_LENGTH]){ int ClientInterface::sendUDPDetails(int fnum, char retval[], char arg[3][MAX_STR_LENGTH]){
char args[3][MAX_STR_LENGTH]; char args[3][MAX_STR_LENGTH];
int ret = slsDetectorDefs::FAIL; int ret = slsDetectorDefs::FAIL;
char mess[MAX_STR_LENGTH]; char mess[MAX_STR_LENGTH];
@ -59,7 +59,7 @@ int receiverInterface::sendUDPDetails(int fnum, char retval[], char arg[3][MAX_S
} }
int receiverInterface::sendInt(int fnum, int &retval, int arg){ int ClientInterface::sendInt(int fnum, int &retval, int arg){
int ret = slsDetectorDefs::FAIL; int ret = slsDetectorDefs::FAIL;
char mess[MAX_STR_LENGTH]; char mess[MAX_STR_LENGTH];
memset(mess, 0, MAX_STR_LENGTH); memset(mess, 0, MAX_STR_LENGTH);
@ -79,7 +79,7 @@ int receiverInterface::sendInt(int fnum, int &retval, int arg){
int receiverInterface::getInt(int fnum, int &retval){ int ClientInterface::getInt(int fnum, int &retval){
int ret = slsDetectorDefs::FAIL; int ret = slsDetectorDefs::FAIL;
char mess[MAX_STR_LENGTH]; char mess[MAX_STR_LENGTH];
memset(mess, 0, MAX_STR_LENGTH); memset(mess, 0, MAX_STR_LENGTH);
@ -98,7 +98,7 @@ int receiverInterface::getInt(int fnum, int &retval){
int receiverInterface::sendInt(int fnum, int64_t &retval, int64_t arg){ int ClientInterface::sendInt(int fnum, int64_t &retval, int64_t arg){
int ret = slsDetectorDefs::FAIL; int ret = slsDetectorDefs::FAIL;
char mess[MAX_STR_LENGTH]; char mess[MAX_STR_LENGTH];
memset(mess, 0, MAX_STR_LENGTH); memset(mess, 0, MAX_STR_LENGTH);
@ -118,7 +118,7 @@ int receiverInterface::sendInt(int fnum, int64_t &retval, int64_t arg){
int receiverInterface::sendIntArray(int fnum, int64_t &retval, int64_t arg[2], char mess[]){ int ClientInterface::sendIntArray(int fnum, int64_t &retval, int64_t arg[2], char mess[]){
int64_t args[2]; int64_t args[2];
int ret = slsDetectorDefs::FAIL; int ret = slsDetectorDefs::FAIL;
memset(mess, 0, MAX_STR_LENGTH); memset(mess, 0, MAX_STR_LENGTH);
@ -138,7 +138,7 @@ int receiverInterface::sendIntArray(int fnum, int64_t &retval, int64_t arg[2], c
int receiverInterface::sendIntArray(int fnum, int &retval, int arg[2]){ int ClientInterface::sendIntArray(int fnum, int &retval, int arg[2]){
int args[2]; int args[2];
int ret = slsDetectorDefs::FAIL; int ret = slsDetectorDefs::FAIL;
char mess[MAX_STR_LENGTH]; char mess[MAX_STR_LENGTH];
@ -159,7 +159,7 @@ int receiverInterface::sendIntArray(int fnum, int &retval, int arg[2]){
int receiverInterface::getInt(int fnum, int64_t &retval){ int ClientInterface::getInt(int fnum, int64_t &retval){
int ret = slsDetectorDefs::FAIL; int ret = slsDetectorDefs::FAIL;
dataSocket->SendDataOnly(&fnum,sizeof(fnum)); dataSocket->SendDataOnly(&fnum,sizeof(fnum));
@ -170,7 +170,7 @@ int receiverInterface::getInt(int fnum, int64_t &retval){
} }
int receiverInterface::getLastClientIP(int fnum, char retval[]){ int ClientInterface::getLastClientIP(int fnum, char retval[]){
int ret = slsDetectorDefs::FAIL; int ret = slsDetectorDefs::FAIL;
dataSocket->SendDataOnly(&fnum,sizeof(fnum)); dataSocket->SendDataOnly(&fnum,sizeof(fnum));
@ -182,7 +182,7 @@ int receiverInterface::getLastClientIP(int fnum, char retval[]){
int receiverInterface::executeFunction(int fnum,char mess[]){ int ClientInterface::executeFunction(int fnum,char mess[]){
int ret = slsDetectorDefs::FAIL; int ret = slsDetectorDefs::FAIL;
memset(mess, 0, MAX_STR_LENGTH); memset(mess, 0, MAX_STR_LENGTH);
@ -198,7 +198,7 @@ int receiverInterface::executeFunction(int fnum,char mess[]){
int receiverInterface::sendROI(int fnum, int n, slsReceiverDefs::ROI roiLimits[]) { int ClientInterface::sendROI(int fnum, int n, slsReceiverDefs::ROI roiLimits[]) {
int ret = slsDetectorDefs::FAIL; int ret = slsDetectorDefs::FAIL;
char mess[MAX_STR_LENGTH]; char mess[MAX_STR_LENGTH];
memset(mess, 0, MAX_STR_LENGTH); memset(mess, 0, MAX_STR_LENGTH);

View File

@ -1,23 +1,16 @@
#pragma once
#ifndef SLS_RECEIVER_INTERFACE_H
#define SLS_RECEIVER_INTERFACE_H
#include "sls_detector_defs.h" #include "sls_detector_defs.h"
#include "MySocketTCP.h" #include "MySocketTCP.h"
/** /**
* * @short the ClientInterface class is the interface between the client and the receiver/detector
* @short the slsReceiverInterface class is the interface between the sls detector and the sls receiver
* @author Dhanya Maliakal
* @version 0.1alpha
*/ */
class receiverInterface{ class ClientInterface{
public: public:
@ -25,19 +18,19 @@ public:
* (default) constructor * (default) constructor
* @param socket tcp socket between client and receiver * @param socket tcp socket between client and receiver
*/ */
receiverInterface(MySocketTCP *socket); ClientInterface(MySocketTCP *socket);
/** /**
* destructor * destructor
*/ */
virtual ~receiverInterface(); virtual ~ClientInterface();
/** /**
* Set the datasocket * Set the datasocket
* @param socket the data socket * @param socket the data socket
*/ */
void setSocket(MySocketTCP *socket){dataSocket=socket;}; void SetSocket(MySocketTCP *socket){dataSocket=socket;};
/** /**
@ -47,7 +40,7 @@ public:
* @param arg value to send * @param arg value to send
* \returns success of operation * \returns success of operation
*/ */
int sendString(int fnum, char retval[], char arg[]); int SendString(int fnum, char retval[], char arg[]);
/** /**
* Send a string to receiver * Send a string to receiver
@ -140,7 +133,7 @@ public:
*/ */
int sendROI(int fnum, int n, slsReceiverDefs::ROI roiLimits[]); int sendROI(int fnum, int n, slsReceiverDefs::ROI roiLimits[]);
//here one should implement the funcs listed in
private: private:
@ -151,4 +144,4 @@ private:
}; };
#endif