diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 799af1014..4ae39fe43 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -185,7 +185,7 @@ int slsDetector::checkVersionCompatibility(portType t) { if (connectData() == OK){ // ignoring retval int64_t retval = -1; - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); if (ret==FAIL){ setErrorMask((getErrorMask())|(VERSION_COMPATIBILITY)); if(strstr(mess,"Unrecognized Function")!=NULL) @@ -222,7 +222,7 @@ int64_t slsDetector::getId( idMode mode) { } else if (mode==RECEIVER_VERSION) { if (thisDetector->receiverOnlineFlag==ONLINE_FLAG) { if (connectData() == OK){ - ret=thisReceiver->GetInt(fnum2,retval); + ret=thisReceiver->Client_Send(fnum2, NULL, 0, &retval, sizeof(retval)); disconnectData(); } if(ret==FORCE_UPDATE) @@ -957,10 +957,11 @@ int slsDetector::setDetectorType(detectorType const type) { (int)thisDetector->myDetectorType << std::endl; #endif if (connectData() == OK){ - int arg = 0; - ret=thisReceiver->SendInt(fnum2,arg,(int)thisDetector->myDetectorType); + int arg = (int)thisDetector->myDetectorType; + int retval2 = 0; + ret=thisReceiver->Client_Send(fnum2, &arg, sizeof(arg), &retval2, sizeof(retval2)); disconnectData(); - retval = (detectorType)arg; + retval = (detectorType)retval2; } if(ret==FAIL){ std::cout << "ERROR: Could not send detector type to receiver" << std::endl; @@ -2761,7 +2762,7 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t) { char mess[MAX_STR_LENGTH]=""; if (connectData() == OK){ - ret=thisReceiver->SendIntArray(fnum2,retval,args,mess); + ret=thisReceiver->Client_Send(fnum2, &args, sizeof(args), &retval, sizeof(retval), mess); disconnectData(); } if((args[1] != retval)|| (ret==FAIL)){ @@ -2951,7 +2952,7 @@ int slsDetector::setDynamicRange(int n) { n << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum2,retval1,n); + ret=thisReceiver->Client_Send(fnum2, &n, sizeof(n), &retval1, sizeof(retval1)); disconnectData(); } if ((ret==FAIL) || (retval1 != retval)){ @@ -3531,7 +3532,7 @@ std::string slsDetector::getReceiverRealUDPSocketBufferSize() { std::cout << "Getting real UDP Socket Buffer size to receiver " << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->GetInt(fnum,retval); + ret=thisReceiver->Client_Send(fnum, NULL, 0, &retval, sizeof(retval)); disconnectData(); } if(ret==FAIL) { @@ -3841,7 +3842,7 @@ std::string slsDetector::setReceiverStreamingPort(std::string port) { std::cout << "Sending receiver streaming port to receiver " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if (ret==FAIL) { @@ -3928,7 +3929,7 @@ std::string slsDetector::setReceiverStreamingIP(std::string sourceIP) { std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendString(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, arg, MAX_STR_LENGTH, retval, MAX_STR_LENGTH); disconnectData(); } if(ret==FAIL) { @@ -3960,7 +3961,7 @@ std::string slsDetector::setAdditionalJsonHeader(std::string jsonheader) { std::cout << "Sending additional json header " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendString(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, arg, MAX_STR_LENGTH, retval, MAX_STR_LENGTH); disconnectData(); } if(ret==FAIL) { @@ -3988,7 +3989,7 @@ std::string slsDetector::setReceiverUDPSocketBufferSize(int udpsockbufsize) { std::cout << "Sending UDP Socket Buffer size to receiver " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if(ret==FAIL) { @@ -4101,7 +4102,7 @@ int slsDetector::setUDPConnection() { std::cout << "Setting up UDP Connection for Receiver " << args[0] << "\t" << args[1] << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendUDPDetails(fnum,retval,args); + ret=thisReceiver->Client_Send(fnum, &args, sizeof(args), &retval, sizeof(retval)); disconnectData(); } if(ret!=FAIL){ @@ -4472,7 +4473,9 @@ int slsDetector::sendROI(int n,ROI roiLimits[]) { std::cout << "Sending ROI to receiver " << thisDetector->nROI << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendROI(fnum, thisDetector->nROI, thisDetector->roiLimits); + ret=thisReceiver->Client_Send(fnum, + &thisDetector->nROI, sizeof(thisDetector->nROI), + thisDetector->roiLimits, thisDetector->nROI * sizeof(ROI)); disconnectData(); } if(ret==FAIL) @@ -4586,7 +4589,7 @@ int slsDetector::activate(int const enable) { std::cout << "Activating/Deactivating Receiver: " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum2,retval,arg); + ret=thisReceiver->Client_Send(fnum2, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if(ret==FAIL) @@ -4626,7 +4629,7 @@ int slsDetector::setDeactivatedRxrPaddingMode(int padding) { std::cout << "Deactivated Receiver Padding Enable: " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if(ret==FAIL) @@ -4675,7 +4678,7 @@ int slsDetector::setFlippedData(dimension d, int value) { if (thisDetector->receiverOnlineFlag==ONLINE_FLAG) { if (connectData() == OK){ - ret=thisReceiver->SendIntArray(fnum,retval,args); + ret=thisReceiver->Client_Send(fnum, args, sizeof(args), &retval, sizeof(retval)); disconnectData(); } @@ -4745,7 +4748,7 @@ int slsDetector::enableGapPixels(int val) { int arg=val; if (thisDetector->receiverOnlineFlag==ONLINE_FLAG) { if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if((arg != retval) || (ret==FAIL)){ @@ -5932,7 +5935,7 @@ int slsDetector::lockReceiver(int lock) { std::cout << "Locking or Unlocking Receiver " << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if(ret==FORCE_UPDATE) @@ -5957,7 +5960,7 @@ std::string slsDetector::getReceiverLastClientIP() { std::cout << "Geting Last Client IP connected to Receiver " << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->GetLastClientIP(fnum,retval); + ret=thisReceiver->Client_Send(fnum, NULL, 0, retval, INET_ADDRSTRLEN); disconnectData(); } if(ret==FORCE_UPDATE) @@ -6006,7 +6009,7 @@ int slsDetector::execReceiverCommand(std::string cmd) { std::cout << "Sending to receiver the command: " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendString(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, arg, MAX_STR_LENGTH, retval, MAX_STR_LENGTH); disconnectData(); } } @@ -6147,7 +6150,7 @@ void slsDetector::sendMultiDetectorSize() { << thisDetector->multiSize[1] << ")" << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendIntArray(fnum,retval,thisDetector->multiSize); + ret=thisReceiver->Client_Send(fnum, thisDetector->multiSize, sizeof(thisDetector->multiSize), &retval, sizeof(retval)); disconnectData(); } if((ret==FAIL)){ @@ -6169,7 +6172,7 @@ void slsDetector::setDetectorId() { std::cout << "Sending detector pos id to Receiver " << detId << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if((ret==FAIL) || (retval != arg)){ @@ -6192,7 +6195,7 @@ void slsDetector::setDetectorHostname() { thisDetector->hostname << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendString(fnum,retval,thisDetector->hostname); + ret=thisReceiver->Client_Send(fnum, thisDetector->hostname, MAX_STR_LENGTH, retval, MAX_STR_LENGTH); disconnectData(); } if((ret==FAIL) || (strcmp(retval,thisDetector->hostname))) @@ -6223,7 +6226,7 @@ std::string slsDetector::setFilePath(std::string s) { std::cout << "Sending file path to receiver " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendString(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, arg, MAX_STR_LENGTH, retval, MAX_STR_LENGTH); disconnectData(); } if(ret!=FAIL){ @@ -6264,7 +6267,7 @@ std::string slsDetector::setFileName(std::string s) { std::cout << "Sending file name to receiver " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendString(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, arg, MAX_STR_LENGTH, retval, MAX_STR_LENGTH); disconnectData(); } if (ret == FAIL) @@ -6295,7 +6298,7 @@ int slsDetector::setReceiverFramesPerFile(int f) { std::cout << "Sending frames per file to receiver " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if (ret == FAIL) @@ -6322,7 +6325,7 @@ slsReceiverDefs::frameDiscardPolicy slsDetector::setReceiverFramesDiscardPolicy( std::cout << "Sending frames discard policy to receiver " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if(ret==FAIL) @@ -6349,7 +6352,7 @@ int slsDetector::setReceiverPartialFramesPadding(int f) { std::cout << "Sending partial frames enable to receiver " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if(ret==FAIL) @@ -6379,7 +6382,7 @@ slsReceiverDefs::fileFormat slsDetector::setFileFormat(fileFormat f) { std::cout << "Sending file format to receiver " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if (ret == FAIL) @@ -6417,7 +6420,7 @@ int slsDetector::setFileIndex(int i) { std::cout << "Sending file index to receiver " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if (ret == FAIL) @@ -6452,7 +6455,7 @@ int slsDetector::startReceiver() { #endif if (connectData() == OK){ - ret=thisReceiver->ExecuteFunction(fnum,mess); + ret=thisReceiver->Client_Send(fnum, NULL, 0, NULL, 0, mess); disconnectData(); } if(ret==FORCE_UPDATE) @@ -6483,7 +6486,7 @@ int slsDetector::stopReceiver() { std::cout << "Stopping Receiver " << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->ExecuteFunction(fnum,mess); + ret=thisReceiver->Client_Send(fnum, NULL, 0, NULL, 0, mess); disconnectData(); } if(ret==FORCE_UPDATE) @@ -6510,7 +6513,7 @@ slsDetectorDefs::runStatus slsDetector::getReceiverStatus() { std::cout << "Getting Receiver Status" << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->GetInt(fnum,retval); + ret=thisReceiver->Client_Send(fnum, NULL, 0, &retval, sizeof(retval)); disconnectData(); } if(retval!=-1) @@ -6535,7 +6538,7 @@ int slsDetector::getFramesCaughtByReceiver() { std::cout << "Getting Frames Caught by Receiver " << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->GetInt(fnum,retval); + ret=thisReceiver->Client_Send(fnum, NULL, 0, &retval, sizeof(retval)); disconnectData(); } if(ret==FORCE_UPDATE) @@ -6563,7 +6566,7 @@ int slsDetector::getReceiverCurrentFrameIndex() { std::cout << "Getting Current Frame Index of Receiver " << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->GetInt(fnum,retval); + ret=thisReceiver->Client_Send(fnum, NULL, 0, &retval, sizeof(retval)); disconnectData(); } if(ret==FORCE_UPDATE) @@ -6586,7 +6589,7 @@ int slsDetector::resetFramesCaught() { std::cout << "Reset Frames Caught by Receiver" << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->ExecuteFunction(fnum,mess); + ret=thisReceiver->Client_Send(fnum, NULL, 0, NULL, 0, mess); disconnectData(); } if(ret==FORCE_UPDATE) @@ -6621,7 +6624,7 @@ int slsDetector::enableWriteToFile(int enable) { std::cout << "Sending enable file write to receiver " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if (ret == FAIL) @@ -6655,7 +6658,7 @@ int slsDetector::overwriteFile(int enable) { std::cout << "Sending enable file write to receiver " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if (ret == FAIL) @@ -6690,7 +6693,7 @@ int slsDetector::setReceiverStreamingFrequency(int freq) { std::cout << "Sending read frequency to receiver " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if((ret == FAIL) || (retval != freq)) { @@ -6720,7 +6723,7 @@ int slsDetector::setReceiverStreamingTimer(int time_in_ms) { std::cout << "Sending read timer to receiver " << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if(ret==FORCE_UPDATE) @@ -6760,7 +6763,7 @@ int slsDetector::enableDataStreamingFromReceiver(int enable) { << arg << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,arg); + ret=thisReceiver->Client_Send(fnum, &arg, sizeof(arg), &retval, sizeof(retval)); disconnectData(); } if(ret==FAIL) { @@ -6822,7 +6825,7 @@ int slsDetector::enableTenGigabitEthernet(int i) { << i << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum2,retval,i); + ret=thisReceiver->Client_Send(fnum2, &i, sizeof(i), &retval, sizeof(retval)); disconnectData(); } if(ret==FAIL) @@ -6853,7 +6856,7 @@ int slsDetector::setReceiverFifoDepth(int i) { std::cout<< "Setting Receiver Fifo Depth to " << i << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,i); + ret=thisReceiver->Client_Send(fnum, &i, sizeof(i), &retval, sizeof(retval)); disconnectData(); } if(ret==FAIL) @@ -6878,7 +6881,7 @@ int slsDetector::setReceiverSilentMode(int i) { std::cout<< "Setting Receiver Silent Mode to " << i << std::endl; #endif if (connectData() == OK){ - ret=thisReceiver->SendInt(fnum,retval,i); + ret=thisReceiver->Client_Send(fnum, &i, sizeof(i), &retval, sizeof(retval)); disconnectData(); } if(ret==FAIL) @@ -6903,7 +6906,7 @@ int slsDetector::restreamStopFromReceiver() { #endif if (connectData() == OK){ - ret=thisReceiver->ExecuteFunction(fnum,mess); + ret=thisReceiver->Client_Send(fnum, NULL, 0, NULL, 0, mess); disconnectData(); } if(ret==FORCE_UPDATE) diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index ca82976dd..52a18c0e1 100644 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -501,11 +501,8 @@ int slsReceiverTCPIPInterface::get_last_client_ip() { if (mySock->differentClients) ret = FORCE_UPDATE; - // send answer - mySock->SendDataOnly(&ret,sizeof(ret)); - mySock->SendDataOnly(mySock->lastClientIP,sizeof(mySock->lastClientIP)); + clientInterface->Server_SendResult(ret,mySock->lastClientIP, INET_ADDRSTRLEN); - // return ok/fail return ret; } @@ -741,21 +738,13 @@ int slsReceiverTCPIPInterface::send_update() { int slsReceiverTCPIPInterface::get_id(){ ret = OK; - int64_t retval=-1; - - // execute action -#ifdef SLS_RECEIVER_UDP_FUNCTIONS - retval = getReceiverVersion(); -#endif + int64_t retval = getReceiverVersion(); if(mySock->differentClients) ret = FORCE_UPDATE; - // send answer - mySock->SendDataOnly(&ret,sizeof(ret)); - mySock->SendDataOnly(&retval,sizeof(retval)); + clientInterface->Server_SendResult(ret, &retval, sizeof(retval)); - // return ok/fail return ret; } diff --git a/slsSupportLib/include/ClientInterface.cpp b/slsSupportLib/include/ClientInterface.cpp index d2f39315d..ce7f8e4f9 100644 --- a/slsSupportLib/include/ClientInterface.cpp +++ b/slsSupportLib/include/ClientInterface.cpp @@ -16,201 +16,84 @@ mySocket(socket), index(n), type(t){} - - ClientInterface::~ClientInterface(){} +void ClientInterface::SetSocket(MySocketTCP *socket) { + mySocket=socket; +} -int ClientInterface::SendString(int fnum, char retval[], char arg[]){ - int ret = slsDetectorDefs::FAIL; - char mess[MAX_STR_LENGTH]; - memset(mess, 0, MAX_STR_LENGTH); - mySocket->SendDataOnly(&fnum,sizeof(fnum)); - mySocket->SendDataOnly(arg,MAX_STR_LENGTH); - mySocket->ReceiveDataOnly(&ret,sizeof(ret)); - if (ret==slsDetectorDefs::FAIL){ - mySocket->ReceiveDataOnly(mess,sizeof(mess)); - cprintf(RED, "%s %d returned error: %s", type.c_str(), index, mess); +int ClientInterface::PrintSocketReadError() { + FILE_LOG(logERROR) << "Reading from socket failed. Possible socket crash"; + return FAIL; +} + + +void ClientInterface::Server_SendResult(int ret, void* retval, int retvalSize) { + mySocket->SendDataOnly(&ret,sizeof(ret)); + mySocket->SendDataOnly(retval, retvalSize); +} + + +int ClientInterface::Client_GetMesage(char* mess) { + int ret = OK; + if (!mess){ + char messref[MAX_STR_LENGTH]; + memset(messref, 0, MAX_STR_LENGTH); + mess = (char*)messref; } - if(strstr(mess,"Unrecognized Function")==NULL) - mySocket->ReceiveDataOnly(retval,MAX_STR_LENGTH); + mySocket->ReceiveDataOnly(mess,MAX_STR_LENGTH); + cprintf(RED, "%s %d returned error: %s", type.c_str(), index, mess); + if(strstr(mess,"Unrecognized Function")!=NULL) + ret = FAIL; return ret; } - -int ClientInterface::SendUDPDetails(int fnum, char retval[], char arg[3][MAX_STR_LENGTH]){ - char args[3][MAX_STR_LENGTH]; - int ret = slsDetectorDefs::FAIL; - char mess[MAX_STR_LENGTH]; - memset(mess, 0, MAX_STR_LENGTH); +int ClientInterface::Client_Send(int fnum, + void* args, int sizeOfArgs, + void* retval, int sizeOfRetval, + char* mess) { mySocket->SendDataOnly(&fnum,sizeof(fnum)); - mySocket->SendDataOnly(arg,sizeof(args)); + mySocket->SendDataOnly(args, sizeOfArgs); + + int ret = FAIL; mySocket->ReceiveDataOnly(&ret,sizeof(ret)); - if (ret==slsDetectorDefs::FAIL){ - mySocket->ReceiveDataOnly(mess,sizeof(mess)); - cprintf(RED, "%s %d returned error: %s", type.c_str(), index, mess); + if (ret == FAIL) { + if (Client_GetMesage(mess) == FAIL) + return FAIL; } - else - mySocket->ReceiveDataOnly(retval,MAX_STR_LENGTH); + mySocket->ReceiveDataOnly(retval, sizeOfRetval); return ret; } -int ClientInterface::SendInt(int fnum, int &retval, int arg){ - int ret = slsDetectorDefs::FAIL; - char mess[MAX_STR_LENGTH]; - memset(mess, 0, MAX_STR_LENGTH); +int ClientInterface::Client_Send(int fnum, + void* args, int sizeOfArgs, + void* args2, int sizeOfArgs2, + void* retval, int sizeOfRetval, + char* mess) { mySocket->SendDataOnly(&fnum,sizeof(fnum)); - mySocket->SendDataOnly(&arg,sizeof(arg)); + mySocket->SendDataOnly(args, sizeOfArgs); + mySocket->SendDataOnly(args2, sizeOfArgs2); + + int ret = FAIL; mySocket->ReceiveDataOnly(&ret,sizeof(ret)); - if (ret==slsDetectorDefs::FAIL){ - mySocket->ReceiveDataOnly(mess,sizeof(mess)); - cprintf(RED, "%s %d returned error: %s", type.c_str(), index, mess); + if (ret == FAIL) { + if (Client_GetMesage(mess) == FAIL) + return FAIL; } - if(strstr(mess,"Unrecognized Function")==NULL) - mySocket->ReceiveDataOnly(&retval,sizeof(retval)); + mySocket->ReceiveDataOnly(retval, sizeOfRetval); return ret; } -int ClientInterface::GetInt(int fnum, int &retval){ - int ret = slsDetectorDefs::FAIL; - char mess[MAX_STR_LENGTH]; - memset(mess, 0, MAX_STR_LENGTH); - - mySocket->SendDataOnly(&fnum,sizeof(fnum)); - mySocket->ReceiveDataOnly(&ret,sizeof(ret)); - if (ret==slsDetectorDefs::FAIL){ - mySocket->ReceiveDataOnly(mess,sizeof(mess)); - cprintf(RED, "%s %d returned error: %s", type.c_str(), index, mess); - } - if(strstr(mess,"Unrecognized Function")==NULL) - mySocket->ReceiveDataOnly(&retval,sizeof(retval)); - - return ret; -} - - - -int ClientInterface::SendInt(int fnum, int64_t &retval, int64_t arg){ - int ret = slsDetectorDefs::FAIL; - char mess[MAX_STR_LENGTH]; - memset(mess, 0, MAX_STR_LENGTH); - - mySocket->SendDataOnly(&fnum,sizeof(fnum)); - mySocket->SendDataOnly(&arg,sizeof(arg)); - mySocket->ReceiveDataOnly(&ret,sizeof(ret)); - if (ret==slsDetectorDefs::FAIL){ - mySocket->ReceiveDataOnly(mess,sizeof(mess)); - cprintf(RED, "%s %d returned error: %s", type.c_str(), index, mess); - } - if(strstr(mess,"Unrecognized Function")==NULL) - mySocket->ReceiveDataOnly(&retval,sizeof(retval)); - - return ret; -} - - - -int ClientInterface::SendIntArray(int fnum, int64_t &retval, int64_t arg[2], char mess[]){ - int64_t args[2]; - int ret = slsDetectorDefs::FAIL; - memset(mess, 0, MAX_STR_LENGTH); - - mySocket->SendDataOnly(&fnum,sizeof(fnum)); - mySocket->SendDataOnly(arg,sizeof(args)); - mySocket->ReceiveDataOnly(&ret,sizeof(ret)); - if (ret==slsDetectorDefs::FAIL){ - mySocket->ReceiveDataOnly(mess,MAX_STR_LENGTH); - cprintf(RED, "%s %d returned error: %s", type.c_str(), index, mess); - } - if(strstr(mess,"Unrecognized Function")==NULL) - mySocket->ReceiveDataOnly(&retval,sizeof(retval)); - - return ret; -} - - - -int ClientInterface::SendIntArray(int fnum, int &retval, int arg[2]){ - int args[2]; - int ret = slsDetectorDefs::FAIL; - char mess[MAX_STR_LENGTH]; - memset(mess, 0, MAX_STR_LENGTH); - - mySocket->SendDataOnly(&fnum,sizeof(fnum)); - mySocket->SendDataOnly(arg,sizeof(args)); - mySocket->ReceiveDataOnly(&ret,sizeof(ret)); - if (ret==slsDetectorDefs::FAIL){ - mySocket->ReceiveDataOnly(mess,sizeof(mess)); - cprintf(RED, "%s %d returned error: %s", type.c_str(), index, mess); - } - if(strstr(mess,"Unrecognized Function")==NULL) - mySocket->ReceiveDataOnly(&retval,sizeof(retval)); - - return ret; -} - - - -int ClientInterface::GetInt(int fnum, int64_t &retval){ - int ret = slsDetectorDefs::FAIL; - mySocket->SendDataOnly(&fnum,sizeof(fnum)); - mySocket->ReceiveDataOnly(&ret,sizeof(ret)); - mySocket->ReceiveDataOnly(&retval,sizeof(retval)); - return ret; -} - - -int ClientInterface::GetLastClientIP(int fnum, char retval[]){ - int ret = slsDetectorDefs::FAIL; - mySocket->SendDataOnly(&fnum,sizeof(fnum)); - mySocket->ReceiveDataOnly(&ret,sizeof(ret)); - mySocket->ReceiveDataOnly(retval,INET_ADDRSTRLEN); - return ret; -} - - - -int ClientInterface::ExecuteFunction(int fnum,char mess[]){ - int ret = slsDetectorDefs::FAIL; - memset(mess, 0, MAX_STR_LENGTH); - - mySocket->SendDataOnly(&fnum,sizeof(fnum)); - mySocket->ReceiveDataOnly(&ret,sizeof(ret)); - if (ret==slsDetectorDefs::FAIL){ - mySocket->ReceiveDataOnly(mess,MAX_STR_LENGTH); - cprintf(RED, "%s %d returned error: %s", type.c_str(), index, mess); - } - - return ret; -} - - - -int ClientInterface::SendROI(int fnum, int n, slsReceiverDefs::ROI roiLimits[]) { - int ret = slsDetectorDefs::FAIL; - char mess[MAX_STR_LENGTH]; - memset(mess, 0, MAX_STR_LENGTH); - - mySocket->SendDataOnly(&fnum,sizeof(fnum)); - mySocket->SendDataOnly(&n,sizeof(n)); - mySocket->SendDataOnly(roiLimits,n * sizeof(slsReceiverDefs::ROI)); - mySocket->ReceiveDataOnly(&ret,sizeof(ret)); - if (ret==slsDetectorDefs::FAIL){ - mySocket->ReceiveDataOnly(mess,sizeof(mess)); - cprintf(RED, "%s %d returned error: %s", type.c_str(), index, mess); - } - return ret; -} diff --git a/slsSupportLib/include/ClientInterface.h b/slsSupportLib/include/ClientInterface.h index 7420bd21e..19bb644a9 100644 --- a/slsSupportLib/include/ClientInterface.h +++ b/slsSupportLib/include/ClientInterface.h @@ -1,16 +1,16 @@ #pragma once -#include "sls_detector_defs.h" +#include "sls_receiver_defs.h" #include "MySocketTCP.h" /** * @short the ClientInterface class is the interface between the client and the server */ +// Do not overload to make it easier for manual comparison between client and server functions - -class ClientInterface{ +class ClientInterface: public virtual slsReceiverDefs{ public: @@ -31,103 +31,61 @@ public: * Set the datasocket * @param socket the data socket */ - void SetSocket(MySocketTCP *socket){mySocket=socket;}; + void SetSocket(MySocketTCP *socket); /** - * Send a string to server + * Print socket read error in Server + */ + int PrintSocketReadError(); + + /** + * Server sends result to client + * @param ret success of operation + * @param retval pointer to result + * @param retvalSize size of result + */ + void Server_SendResult(int ret, void* retval, int retvalSize); + + /** + * Get message from server + * Print appropriate message + * Check for Unrecognized function in message and return fail if it does + * to prevent getting retval from the server afterwards + * @param mess message + * @returns FAIL if unrecognized function found in message, else OK + */ + int Client_GetMesage(char* mess=0); + + /** + * Send Arguments to server and get result back * @param fnum function enum to determine what parameter - * @param retval return value - * @param arg value to send - * \returns success of operation + * @param args pointer to arguments + * @param sizeOfArgs argument size + * @param retval pointer to return value + * @param sizeOfRetval return value size + * @param mess pointer to message if message required externally */ - int SendString(int fnum, char retval[], char arg[]); + int Client_Send(int fnum, + void* args, int sizeOfArgs, + void* retval, int sizeOfRetval, + char* mess = 0); /** - * Send a string to server - * @param fnum function enum to send udp ip and udp port - * @param retval return value server mac - * @param arg value to send - * \returns success of operation - */ - int SendUDPDetails(int fnum, char retval[], char arg[3][MAX_STR_LENGTH]); - - /** - * Send an integer to server + * Send Arguments (second set) to server and get result back * @param fnum function enum to determine what parameter - * @param retval return value - * @param arg value to send - * \returns success of operation + * @param args pointer to arguments + * @param sizeOfArgs argument size + * @param args2 pointer to arguments 2 + * @param sizeOfArgs2 argument size 2 + * @param retval pointer to return value + * @param sizeOfRetval return value size + * @param mess pointer to message if message required externally */ - int SendInt(int fnum, int &retval, int arg); - - /** - * Get an integer value from server - * @param fnum function enum to determine what parameter - * @param retval return value - * \returns success of operation - */ - int GetInt(int fnum, int &retval); - - /** - * Send an integer to server - * @param fnum function enum to determine what parameter - * @param retval return value - * @param arg value to send - * \returns success of operation - */ - int SendInt(int fnum, int64_t &retval, int64_t arg); - - /** - * Send an integer to server - * @param fnum function enum to determine what parameter - * @param retval return value - * @param arg values to send - * @param mess message returned - * \returns success of operation - */ - int SendIntArray(int fnum, int64_t &retval, int64_t arg[2],char mess[]); - - /** - * Send an integer to server - * @param fnum function enum to determine what parameter - * @param retval return value - * @param arg values to send - * \returns success of operation - */ - int SendIntArray(int fnum, int &retval, int arg[2]); - - /** - * Get an integer value from server - * @param fnum function enum to determine what parameter - * @param retval return value - * \returns success of operation - */ - int GetInt(int fnum, int64_t &retval); - - /** - * Get last client ip connected to server - * @param fnum function enum to get last client up - * @param retval return value - * \returns success of operation - */ - int GetLastClientIP(int fnum, char retval[]); - - /** - * Send a function number to execute function - * @param fnum function enum to determine which function to execute - * @param mess return error message - * \returns success of operation - */ - int ExecuteFunction(int fnum,char mess[]); - - /** - * Send an integer to server - * @param fnum function enum to determine what parameter - * @param n number of ROIs to send - * @param roiLimits ROI structure - * \returns success of operation - */ - int SendROI(int fnum, int n, slsReceiverDefs::ROI roiLimits[]); + int Client_Send(int fnum, + void* args, int sizeOfArgs, + void* args2, int sizeOfArgs2, + void* retval, int sizeOfRetval, + char* mess = 0); private: