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