mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-12 04:47:14 +02:00
put in the changes by Andrea to make it as static and remove as many destructors bugs
This commit is contained in:
@ -54,9 +54,6 @@ class slsReceiverTCPIPInterface : private virtual slsReceiverDefs {
|
||||
/** Close all threaded Files and exit */
|
||||
void closeFile(int p);
|
||||
|
||||
/** Static function to call closeFile */
|
||||
static void staticCloseFile(int p);
|
||||
|
||||
/** gets version */
|
||||
int64_t getReceiverVersion();
|
||||
|
||||
|
@ -83,8 +83,8 @@ public:
|
||||
|
||||
void registerCallBackRawDataReady(void (*func)(int framenumber, char* datapointer, int datasize, FILE* filedescriptor, char* guidatapointer, void*),void *arg);
|
||||
|
||||
// made static to close thread files with ctrl+c
|
||||
static slsReceiver* receiver;
|
||||
//receiver object
|
||||
slsReceiver* receiver;
|
||||
};
|
||||
|
||||
|
||||
|
@ -60,7 +60,7 @@ UDPStandardImplementation::UDPStandardImplementation(){
|
||||
|
||||
UDPStandardImplementation::~UDPStandardImplementation(){
|
||||
FILE_LOG(logDEBUG1) << __AT__ << " called";
|
||||
|
||||
closeFile();
|
||||
deleteMembers();
|
||||
}
|
||||
|
||||
@ -1184,9 +1184,9 @@ void UDPStandardImplementation::setThreadPriorities(){
|
||||
if (pthread_setschedparam(pthread_self(),5 , &tcp_param) == EPERM)
|
||||
rights = false;
|
||||
|
||||
if(!rights)
|
||||
if(!rights){
|
||||
FILE_LOG(logWARNING) << "No root permission to prioritize threads.";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1256,8 +1256,9 @@ int UDPStandardImplementation::setupWriter(){
|
||||
|
||||
if(cbAction < DO_EVERYTHING){
|
||||
FILE_LOG(logINFO) << "Call back activated. Data saving must be taken care of by user in call back.";
|
||||
if (rawDataReadyCallBack)
|
||||
if (rawDataReadyCallBack){
|
||||
FILE_LOG(logINFO) << "Data Write has been defined externally";
|
||||
}
|
||||
}else if(!fileWriteEnable)
|
||||
FILE_LOG(logINFO) << "Data will not be saved";
|
||||
|
||||
|
@ -6,25 +6,38 @@
|
||||
|
||||
#include <iostream>
|
||||
#include <string.h>
|
||||
#include <signal.h> //SIGINT
|
||||
|
||||
#include "utilities.h"
|
||||
#include "logger.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
slsReceiverUsers *receiver;
|
||||
|
||||
void deleteReceiver(slsReceiverUsers* r){
|
||||
if(r){delete r;r=0;}
|
||||
}
|
||||
|
||||
void closeFile(int p){
|
||||
deleteReceiver(receiver);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
//Catch signal SIGINT to close files properly
|
||||
signal(SIGINT,closeFile);
|
||||
|
||||
int ret = slsReceiverDefs::OK;
|
||||
receiver = new slsReceiverUsers(argc, argv, ret);
|
||||
|
||||
slsReceiverUsers *user = new slsReceiverUsers(argc, argv, ret);
|
||||
|
||||
if(ret==slsReceiverDefs::FAIL)
|
||||
if(ret==slsReceiverDefs::FAIL){
|
||||
deleteReceiver(receiver);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
//register callbacks
|
||||
|
||||
|
||||
/**
|
||||
callback arguments are
|
||||
filepath
|
||||
@ -37,10 +50,8 @@ int main(int argc, char *argv[]) {
|
||||
1 callback writes file, we have to open, close it
|
||||
2 we open, close, write file, callback does not do anything
|
||||
|
||||
|
||||
registerCallBackStartAcquisition(int (*func)(char*, char*,int, int, void*),void *arg);
|
||||
*/
|
||||
|
||||
//receiver->registerCallBackStartAcquisition(func,arg);
|
||||
|
||||
|
||||
@ -49,32 +60,25 @@ int main(int argc, char *argv[]) {
|
||||
total farmes caught
|
||||
registerCallBackAcquisitionFinished(void (*func)(int, void*),void *arg);
|
||||
*/
|
||||
|
||||
|
||||
//receiver->registerCallBackAcquisitionFinished(func,arg);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
args to raw data ready callback are
|
||||
framenum
|
||||
datapointer
|
||||
file descriptor
|
||||
guidatapointer (NULL, no data required)
|
||||
|
||||
NEVER DELETE THE DATA POINTER
|
||||
REMEMBER THAT THE CALLBACK IS BLOCKING
|
||||
|
||||
registerCallBackRawDataReady(void (*func)(int, char*, FILE*, char*, void*),void *arg);
|
||||
|
||||
*/
|
||||
|
||||
//receiver->registerCallBackRawDataReady(func,arg);
|
||||
|
||||
|
||||
|
||||
//start tcp server thread
|
||||
if(user->start() == slsReceiverDefs::OK){
|
||||
if(receiver->start() == slsReceiverDefs::OK){
|
||||
FILE_LOG(logDEBUG1) << "DONE!" << endl;
|
||||
string str;
|
||||
cin>>str;
|
||||
@ -82,10 +86,10 @@ int main(int argc, char *argv[]) {
|
||||
while(str.find("exit") == string::npos)
|
||||
cin>>str;
|
||||
//stop tcp server thread, stop udp socket
|
||||
user->stop();
|
||||
receiver->stop();
|
||||
}
|
||||
|
||||
delete user;
|
||||
deleteReceiver(receiver);
|
||||
cout << "Goodbye!" << endl;
|
||||
return 0;
|
||||
}
|
||||
|
@ -29,6 +29,9 @@ slsReceiver::slsReceiver(int argc, char *argv[], int &success){
|
||||
* @return
|
||||
*/
|
||||
|
||||
udp_interface = NULL;
|
||||
tcpipInterface = NULL;
|
||||
|
||||
//creating base receiver
|
||||
map<string, string> configuration_map;
|
||||
int tcpip_port_no = 1954;
|
||||
@ -55,7 +58,8 @@ slsReceiver::slsReceiver(int argc, char *argv[], int &success){
|
||||
};
|
||||
/* getopt_long stores the option index here. */
|
||||
int option_index = 0;
|
||||
int c;
|
||||
int c=0;
|
||||
optind = 1;
|
||||
|
||||
while ( c != -1 ){
|
||||
c = getopt_long (argc, argv, "mbfhtr", long_options, &option_index);
|
||||
|
@ -9,10 +9,7 @@
|
||||
#include "slsReceiverUsers.h"
|
||||
#include "slsReceiver.h"
|
||||
|
||||
|
||||
#include <signal.h> //SIGINT
|
||||
#include <stdlib.h> //EXIT
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
@ -27,9 +24,8 @@ using namespace std;
|
||||
|
||||
|
||||
slsReceiverTCPIPInterface::~slsReceiverTCPIPInterface() {
|
||||
closeFile(0);
|
||||
stop();
|
||||
if(socket) {delete socket; socket=NULL;}
|
||||
if(receiverBase) {delete receiverBase; receiverBase=NULL;}
|
||||
}
|
||||
|
||||
slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int &success, UDPInterface* rbase, int pn, bool bot):
|
||||
@ -71,9 +67,6 @@ slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int &success, UDPInterface*
|
||||
#ifdef VERBOSE
|
||||
cout << "Function table assigned." << endl;
|
||||
#endif
|
||||
|
||||
//Catch signal SIGINT to close files properly
|
||||
signal(SIGINT,staticCloseFile);
|
||||
}
|
||||
}
|
||||
|
||||
@ -139,34 +132,13 @@ int slsReceiverTCPIPInterface::start(){
|
||||
|
||||
|
||||
void slsReceiverTCPIPInterface::stop(){
|
||||
|
||||
cout << "Shutting down UDP Socket" << endl;
|
||||
if(receiverBase)
|
||||
receiverBase->shutDownUDPSockets();
|
||||
|
||||
cout << "Closing Files... " << endl;
|
||||
receiverBase->closeFile();
|
||||
|
||||
|
||||
cout<<"Shutting down TCP Socket and TCP thread"<<endl;
|
||||
cout << "Shutting down UDP Socket" << endl;
|
||||
if(receiverBase){
|
||||
receiverBase->shutDownUDPSockets();
|
||||
|
||||
cout << "Closing Files... " << endl;
|
||||
receiverBase->closeFile();
|
||||
}
|
||||
|
||||
|
||||
killTCPServerThread = 1;
|
||||
socket->ShutDownSocket();
|
||||
socket->exitServer();
|
||||
if(socket) socket->ShutDownSocket();
|
||||
cout<<"Socket closed"<<endl;
|
||||
void* status;
|
||||
pthread_join(TCPServer_thread, &status);
|
||||
pthread_join(TCPServer_thread, NULL);
|
||||
killTCPServerThread = 0;
|
||||
cout<<"Threads joined"<<endl;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -347,13 +319,7 @@ int slsReceiverTCPIPInterface::M_nofunc(){
|
||||
|
||||
|
||||
void slsReceiverTCPIPInterface::closeFile(int p){
|
||||
stop();
|
||||
cout << "Goodbye!" << endl;
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
void slsReceiverTCPIPInterface::staticCloseFile(int p){
|
||||
slsReceiverUsers::receiver->closeFile(p);
|
||||
receiverBase->closeFile();
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,47 +1,45 @@
|
||||
#include "slsReceiverUsers.h"
|
||||
#include "slsReceiver.h"
|
||||
|
||||
slsReceiver* slsReceiverUsers::receiver(NULL);
|
||||
|
||||
slsReceiverUsers::slsReceiverUsers(int argc, char *argv[], int &success) {
|
||||
slsReceiverUsers::receiver=new slsReceiver(argc, argv, success);
|
||||
receiver=new slsReceiver(argc, argv, success);
|
||||
}
|
||||
|
||||
slsReceiverUsers::~slsReceiverUsers() {
|
||||
delete slsReceiverUsers::receiver;
|
||||
delete receiver;
|
||||
}
|
||||
|
||||
int slsReceiverUsers::start() {
|
||||
return slsReceiverUsers::receiver->start();
|
||||
return receiver->start();
|
||||
}
|
||||
|
||||
void slsReceiverUsers::stop() {
|
||||
slsReceiverUsers::receiver->stop();
|
||||
receiver->stop();
|
||||
}
|
||||
|
||||
|
||||
void slsReceiverUsers::closeFile(int p) {
|
||||
slsReceiverUsers::receiver->closeFile(p);
|
||||
receiver->closeFile(p);
|
||||
}
|
||||
|
||||
int64_t slsReceiverUsers::getReceiverVersion(){
|
||||
return slsReceiverUsers::receiver->getReceiverVersion();
|
||||
return receiver->getReceiverVersion();
|
||||
}
|
||||
|
||||
|
||||
void slsReceiverUsers::registerCallBackStartAcquisition(int (*func)(char*, char*,int, int, void*),void *arg){
|
||||
slsReceiverUsers::receiver->registerCallBackStartAcquisition(func,arg);
|
||||
receiver->registerCallBackStartAcquisition(func,arg);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void slsReceiverUsers::registerCallBackAcquisitionFinished(void (*func)(int, void*),void *arg){
|
||||
slsReceiverUsers::receiver->registerCallBackAcquisitionFinished(func,arg);
|
||||
receiver->registerCallBackAcquisitionFinished(func,arg);
|
||||
}
|
||||
|
||||
|
||||
void slsReceiverUsers::registerCallBackRawDataReady(void (*func)(int, char*, int, FILE*, char*, void*),void *arg){
|
||||
slsReceiverUsers::receiver->registerCallBackRawDataReady(func,arg);
|
||||
receiver->registerCallBackRawDataReady(func,arg);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user