mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-26 08:10:02 +02:00
Merge branch 'developer' of github.com:slsdetectorgroup/slsDetectorPackage into developer
This commit is contained in:
commit
7fadf4feb4
@ -721,8 +721,8 @@ bool multiSlsDetector::initSharedMemory(bool verify) {
|
|||||||
cprintf(RED, "Multi shared memory (%d) version mismatch "
|
cprintf(RED, "Multi shared memory (%d) version mismatch "
|
||||||
"(expected 0x%x but got 0x%x)\n", detId,
|
"(expected 0x%x but got 0x%x)\n", detId,
|
||||||
MULTI_SHMVERSION, thisMultiDetector->shmversion);
|
MULTI_SHMVERSION, thisMultiDetector->shmversion);
|
||||||
sharedMemory->UnmapSharedMemory(thisMultiDetector);/** is this unncessary? */
|
sharedMemory->UnmapSharedMemory(thisMultiDetector);
|
||||||
delete sharedMemory;/** is this unncessary? */
|
delete sharedMemory;
|
||||||
sharedMemory = 0;
|
sharedMemory = 0;
|
||||||
throw SharedMemoryException();
|
throw SharedMemoryException();
|
||||||
}
|
}
|
||||||
@ -732,8 +732,8 @@ bool multiSlsDetector::initSharedMemory(bool verify) {
|
|||||||
created = true;
|
created = true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
sharedMemory->RemoveSharedMemory();
|
sharedMemory->RemoveSharedMemory();
|
||||||
delete sharedMemory;/** is this unncessary? */
|
delete sharedMemory;
|
||||||
sharedMemory = 0;/** is this unncessary? */
|
sharedMemory = 0;
|
||||||
thisMultiDetector = 0;
|
thisMultiDetector = 0;
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
@ -4852,6 +4852,7 @@ int multiSlsDetector::createReceivingDataSockets(const bool destroy) {
|
|||||||
cprintf(MAGENTA, "Going to destroy data sockets\n");
|
cprintf(MAGENTA, "Going to destroy data sockets\n");
|
||||||
//close socket
|
//close socket
|
||||||
for (vector<ZmqSocket*>::const_iterator it = zmqSocket.begin(); it != zmqSocket.end(); ++it) {
|
for (vector<ZmqSocket*>::const_iterator it = zmqSocket.begin(); it != zmqSocket.end(); ++it) {
|
||||||
|
(*it)->Close();
|
||||||
delete(*it);
|
delete(*it);
|
||||||
}
|
}
|
||||||
zmqSocket.clear();
|
zmqSocket.clear();
|
||||||
|
@ -113,7 +113,8 @@ public:
|
|||||||
// create multiSlsDetector class if required
|
// create multiSlsDetector class if required
|
||||||
if (myDetector==NULL) { \
|
if (myDetector==NULL) { \
|
||||||
try { \
|
try { \
|
||||||
myDetector = new multiSlsDetector(id, verify, update); \
|
multiSlsDetector* m = new multiSlsDetector(id, verify, update); \
|
||||||
|
myDetector = m; \
|
||||||
} catch (const SharedMemoryException & e) { \
|
} catch (const SharedMemoryException & e) { \
|
||||||
cout << e.GetMessage() << endl; \
|
cout << e.GetMessage() << endl; \
|
||||||
return; \
|
return; \
|
||||||
|
@ -1001,7 +1001,7 @@ slsDetectorDefs::sls_detector_module* slsDetector::createModule(detectorType ty
|
|||||||
nd = detlist.nDacs;
|
nd = detlist.nDacs;
|
||||||
na = detlist.nAdcs;
|
na = detlist.nAdcs;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
;// FIXME do what here?
|
return NULL;
|
||||||
}
|
}
|
||||||
dacs_t *dacs=new dacs_t[nd];
|
dacs_t *dacs=new dacs_t[nd];
|
||||||
dacs_t *adcs=new dacs_t[na];
|
dacs_t *adcs=new dacs_t[na];
|
||||||
|
@ -270,13 +270,17 @@ public:
|
|||||||
|
|
||||||
dset->extend(dims);
|
dset->extend(dims);
|
||||||
delete dspace;
|
delete dspace;
|
||||||
dspace = new DataSpace(dset->getSpace());
|
dspace = 0;
|
||||||
|
DataSpace* d = new DataSpace(dset->getSpace());
|
||||||
|
dspace = d;
|
||||||
|
|
||||||
hsize_t dims_para[1] = {dims[0]};
|
hsize_t dims_para[1] = {dims[0]};
|
||||||
for (unsigned int i = 0; i < dset_para.size(); ++i)
|
for (unsigned int i = 0; i < dset_para.size(); ++i)
|
||||||
dset_para[i]->extend(dims_para);
|
dset_para[i]->extend(dims_para);
|
||||||
delete dspace_para;
|
delete dspace_para;
|
||||||
dspace_para = new DataSpace(dset_para[0]->getSpace());
|
dspace_para = 0;
|
||||||
|
DataSpace* ds = new DataSpace(dset_para[0]->getSpace());
|
||||||
|
dspace_para = ds;
|
||||||
|
|
||||||
}
|
}
|
||||||
catch(Exception error){
|
catch(Exception error){
|
||||||
@ -318,14 +322,16 @@ public:
|
|||||||
|
|
||||||
FileAccPropList flist;
|
FileAccPropList flist;
|
||||||
flist.setFcloseDegree(H5F_CLOSE_STRONG);
|
flist.setFcloseDegree(H5F_CLOSE_STRONG);
|
||||||
|
int k = 0;
|
||||||
if(!owenable)
|
if(!owenable)
|
||||||
fd = new H5File( fname.c_str(), H5F_ACC_EXCL,
|
k = new H5File( fname.c_str(), H5F_ACC_EXCL,
|
||||||
FileCreatPropList::DEFAULT,
|
FileCreatPropList::DEFAULT,
|
||||||
flist );
|
flist );
|
||||||
else
|
else
|
||||||
fd = new H5File( fname.c_str(), H5F_ACC_TRUNC,
|
k = new H5File( fname.c_str(), H5F_ACC_TRUNC,
|
||||||
FileCreatPropList::DEFAULT,
|
FileCreatPropList::DEFAULT,
|
||||||
flist );
|
flist );
|
||||||
|
fd = k;
|
||||||
|
|
||||||
//variables
|
//variables
|
||||||
DataSpace dataspace = DataSpace (H5S_SCALAR);
|
DataSpace dataspace = DataSpace (H5S_SCALAR);
|
||||||
@ -416,6 +422,7 @@ public:
|
|||||||
} catch(Exception error) {
|
} catch(Exception error) {
|
||||||
cprintf(RED,"Error in creating master HDF5 handles\n");
|
cprintf(RED,"Error in creating master HDF5 handles\n");
|
||||||
error.printErrorStack();
|
error.printErrorStack();
|
||||||
|
if (fd) fd->close();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -459,14 +466,16 @@ public:
|
|||||||
//file
|
//file
|
||||||
FileAccPropList fapl;
|
FileAccPropList fapl;
|
||||||
fapl.setFcloseDegree(H5F_CLOSE_STRONG);
|
fapl.setFcloseDegree(H5F_CLOSE_STRONG);
|
||||||
|
int k = 0;
|
||||||
if(!owenable)
|
if(!owenable)
|
||||||
fd = new H5File( fname.c_str(), H5F_ACC_EXCL,
|
k = new H5File( fname.c_str(), H5F_ACC_EXCL,
|
||||||
FileCreatPropList::DEFAULT,
|
FileCreatPropList::DEFAULT,
|
||||||
fapl );
|
fapl );
|
||||||
else
|
else
|
||||||
fd = new H5File( fname.c_str(), H5F_ACC_TRUNC,
|
k = new H5File( fname.c_str(), H5F_ACC_TRUNC,
|
||||||
FileCreatPropList::DEFAULT,
|
FileCreatPropList::DEFAULT,
|
||||||
fapl );
|
fapl );
|
||||||
|
fd = k;
|
||||||
|
|
||||||
//attributes - version
|
//attributes - version
|
||||||
double dValue=version;
|
double dValue=version;
|
||||||
@ -477,7 +486,8 @@ public:
|
|||||||
//dataspace
|
//dataspace
|
||||||
hsize_t srcdims[3] = {nDimx, nDimy, nDimz};
|
hsize_t srcdims[3] = {nDimx, nDimy, nDimz};
|
||||||
hsize_t srcdimsmax[3] = {H5S_UNLIMITED, nDimy, nDimz};
|
hsize_t srcdimsmax[3] = {H5S_UNLIMITED, nDimy, nDimz};
|
||||||
dspace = new DataSpace (3,srcdims,srcdimsmax);
|
DataSpace* d = new DataSpace (3,srcdims,srcdimsmax);
|
||||||
|
dspace = d;
|
||||||
|
|
||||||
|
|
||||||
//dataset name
|
//dataset name
|
||||||
@ -494,12 +504,14 @@ public:
|
|||||||
// always create chunked dataset as unlimited is only supported with chunked layout
|
// always create chunked dataset as unlimited is only supported with chunked layout
|
||||||
hsize_t chunk_dims[3] ={maxchunkedimages, nDimy, nDimz};
|
hsize_t chunk_dims[3] ={maxchunkedimages, nDimy, nDimz};
|
||||||
plist.setChunk(3, chunk_dims);
|
plist.setChunk(3, chunk_dims);
|
||||||
dset = new DataSet (fd->createDataSet(dsetname.c_str(), dtype, *dspace, plist));
|
DataSet* ds = new DataSet (fd->createDataSet(dsetname.c_str(), dtype, *dspace, plist));
|
||||||
|
dset = ds;
|
||||||
|
|
||||||
//create parameter datasets
|
//create parameter datasets
|
||||||
hsize_t dims[1] = {nDimx};
|
hsize_t dims[1] = {nDimx};
|
||||||
hsize_t dimsmax[1] = {H5S_UNLIMITED};
|
hsize_t dimsmax[1] = {H5S_UNLIMITED};
|
||||||
dspace_para = new DataSpace (1,dims,dimsmax);
|
DataSpace* dsp = new DataSpace (1,dims,dimsmax);
|
||||||
|
dspace_para = dsp;
|
||||||
|
|
||||||
// always create chunked dataset as unlimited is only supported with chunked layout
|
// always create chunked dataset as unlimited is only supported with chunked layout
|
||||||
DSetCreatPropList paralist;
|
DSetCreatPropList paralist;
|
||||||
@ -515,7 +527,7 @@ public:
|
|||||||
catch(Exception error){
|
catch(Exception error){
|
||||||
cprintf(RED,"Error in creating HDF5 handles in object %d\n",ind);
|
cprintf(RED,"Error in creating HDF5 handles in object %d\n",ind);
|
||||||
error.printErrorStack();
|
error.printErrorStack();
|
||||||
fd->close();
|
if (fd) fd->close();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -44,10 +44,7 @@ public:
|
|||||||
* @param portnumber port number
|
* @param portnumber port number
|
||||||
*/
|
*/
|
||||||
ZmqSocket (const char* const hostname_or_ip, const uint32_t portnumber):
|
ZmqSocket (const char* const hostname_or_ip, const uint32_t portnumber):
|
||||||
portno (portnumber),
|
portno (portnumber)
|
||||||
server (false),
|
|
||||||
contextDescriptor (NULL),
|
|
||||||
socketDescriptor (NULL)
|
|
||||||
// headerMessage(0)
|
// headerMessage(0)
|
||||||
{
|
{
|
||||||
char ip[MAX_STR_LENGTH] = "";
|
char ip[MAX_STR_LENGTH] = "";
|
||||||
@ -60,19 +57,19 @@ public:
|
|||||||
throw std::exception();
|
throw std::exception();
|
||||||
|
|
||||||
// construct address
|
// construct address
|
||||||
sprintf (serverAddress, "tcp://%s:%d", ip, portno);
|
sprintf (sockfd.serverAddress, "tcp://%s:%d", ip, portno);
|
||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
cprintf(BLUE,"address:%s\n",serverAddress);
|
cprintf(BLUE,"address:%s\n",sockfd.serverAddress);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// create context
|
// create context
|
||||||
contextDescriptor = zmq_ctx_new();
|
sockfd.contextDescriptor = zmq_ctx_new();
|
||||||
if (contextDescriptor == NULL)
|
if (sockfd.contextDescriptor == 0)
|
||||||
throw std::exception();
|
throw std::exception();
|
||||||
|
|
||||||
// create publisher
|
// create publisher
|
||||||
socketDescriptor = zmq_socket (contextDescriptor, ZMQ_SUB);
|
sockfd.socketDescriptor = zmq_socket (sockfd.contextDescriptor, ZMQ_SUB);
|
||||||
if (socketDescriptor == NULL) {
|
if (sockfd.socketDescriptor == 0) {
|
||||||
PrintError ();
|
PrintError ();
|
||||||
Close ();
|
Close ();
|
||||||
throw std::exception();
|
throw std::exception();
|
||||||
@ -80,7 +77,7 @@ public:
|
|||||||
|
|
||||||
//Socket Options provided above
|
//Socket Options provided above
|
||||||
// an empty string implies receiving any messages
|
// an empty string implies receiving any messages
|
||||||
if ( zmq_setsockopt(socketDescriptor, ZMQ_SUBSCRIBE, "", 0)) {
|
if ( zmq_setsockopt(sockfd.socketDescriptor, ZMQ_SUBSCRIBE, "", 0)) {
|
||||||
PrintError ();
|
PrintError ();
|
||||||
Close();
|
Close();
|
||||||
throw std::exception();
|
throw std::exception();
|
||||||
@ -89,7 +86,7 @@ public:
|
|||||||
//ZMQ_SNDHWM default is 0 means no limit. use this to optimize if optimizing required
|
//ZMQ_SNDHWM default is 0 means no limit. use this to optimize if optimizing required
|
||||||
// eg. int value = -1;
|
// eg. int value = -1;
|
||||||
int value = 0;
|
int value = 0;
|
||||||
if (zmq_setsockopt(socketDescriptor, ZMQ_LINGER, &value,sizeof(value))) {
|
if (zmq_setsockopt(sockfd.socketDescriptor, ZMQ_LINGER, &value,sizeof(value))) {
|
||||||
PrintError ();
|
PrintError ();
|
||||||
Close();
|
Close();
|
||||||
throw std::exception();
|
throw std::exception();
|
||||||
@ -104,19 +101,19 @@ public:
|
|||||||
* @param ethip is the ip of the ethernet interface to stream zmq from
|
* @param ethip is the ip of the ethernet interface to stream zmq from
|
||||||
*/
|
*/
|
||||||
ZmqSocket (const uint32_t portnumber, const char *ethip):
|
ZmqSocket (const uint32_t portnumber, const char *ethip):
|
||||||
portno (portnumber),
|
|
||||||
server (true),
|
portno (portnumber)
|
||||||
contextDescriptor (NULL),
|
|
||||||
socketDescriptor (NULL)
|
|
||||||
// headerMessage(0)
|
// headerMessage(0)
|
||||||
{
|
{
|
||||||
|
sockfd.server = true;
|
||||||
|
|
||||||
// create context
|
// create context
|
||||||
contextDescriptor = zmq_ctx_new();
|
sockfd.contextDescriptor = zmq_ctx_new();
|
||||||
if (contextDescriptor == NULL)
|
if (sockfd.contextDescriptor == 0)
|
||||||
throw std::exception();
|
throw std::exception();
|
||||||
// create publisher
|
// create publisher
|
||||||
socketDescriptor = zmq_socket (contextDescriptor, ZMQ_PUB);
|
sockfd.socketDescriptor = zmq_socket (sockfd.contextDescriptor, ZMQ_PUB);
|
||||||
if (socketDescriptor == NULL) {
|
if (sockfd.socketDescriptor == 0) {
|
||||||
PrintError ();
|
PrintError ();
|
||||||
Close ();
|
Close ();
|
||||||
throw std::exception();
|
throw std::exception();
|
||||||
@ -125,12 +122,12 @@ public:
|
|||||||
//Socket Options provided above
|
//Socket Options provided above
|
||||||
|
|
||||||
// construct addresss
|
// construct addresss
|
||||||
sprintf (serverAddress,"tcp://%s:%d", ethip, portno);
|
sprintf (sockfd.serverAddress,"tcp://%s:%d", ethip, portno);
|
||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
cprintf(BLUE,"address:%s\n",serverAddress);
|
cprintf(BLUE,"address:%s\n",sockfd.serverAddress);
|
||||||
#endif
|
#endif
|
||||||
// bind address
|
// bind address
|
||||||
if (zmq_bind (socketDescriptor, serverAddress) < 0) {
|
if (zmq_bind (sockfd.socketDescriptor, sockfd.serverAddress) < 0) {
|
||||||
PrintError ();
|
PrintError ();
|
||||||
Close ();
|
Close ();
|
||||||
throw std::exception();
|
throw std::exception();
|
||||||
@ -144,69 +141,49 @@ public:
|
|||||||
* Destructor
|
* Destructor
|
||||||
*/
|
*/
|
||||||
~ZmqSocket () {
|
~ZmqSocket () {
|
||||||
Disconnect();
|
//mySocketDescriptor destructor also gets called
|
||||||
Close();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns Server Address
|
|
||||||
* @returns Server Address
|
|
||||||
*/
|
|
||||||
char* GetZmqServerAddress () { return serverAddress; };
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns Port Number
|
* Returns Port Number
|
||||||
* @returns Port Number
|
* @returns Port Number
|
||||||
*/
|
*/
|
||||||
uint32_t GetPortNumber () { return portno; };
|
uint32_t GetPortNumber () { return portno; };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns Server Address
|
||||||
|
* @returns Server Address
|
||||||
|
*/
|
||||||
|
char* GetZmqServerAddress () { return sockfd.serverAddress; };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns Socket Descriptor
|
* Returns Socket Descriptor
|
||||||
* @reutns Socket descriptor
|
* @reutns Socket descriptor
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void* GetsocketDescriptor () { return socketDescriptor; };
|
void* GetsocketDescriptor () { return sockfd.socketDescriptor; };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Connect client socket to server socket
|
* Connect client socket to server socket
|
||||||
* @returns 1 for fail, 0 for success
|
* @returns 1 for fail, 0 for success
|
||||||
*/
|
*/
|
||||||
int Connect() {
|
int Connect() {
|
||||||
if (zmq_connect(socketDescriptor, serverAddress) < 0) {
|
if (zmq_connect(sockfd.socketDescriptor, sockfd.serverAddress) < 0) {
|
||||||
PrintError ();
|
PrintError ();
|
||||||
Close ();
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unbinds the Socket
|
* Unbinds the Socket
|
||||||
*/
|
*/
|
||||||
void Disconnect () {
|
void Disconnect () {sockfd.Disconnect();};
|
||||||
if (server)
|
|
||||||
zmq_unbind (socketDescriptor, serverAddress);
|
|
||||||
else
|
|
||||||
zmq_disconnect (socketDescriptor, serverAddress);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Close Socket and destroy Context
|
* Close Socket and destroy Context
|
||||||
*/
|
*/
|
||||||
void Close () {
|
void Close () { sockfd.Close(); };
|
||||||
if (socketDescriptor != NULL) {
|
|
||||||
zmq_close (socketDescriptor);
|
|
||||||
socketDescriptor = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (contextDescriptor != NULL) {
|
|
||||||
zmq_ctx_destroy (contextDescriptor);
|
|
||||||
contextDescriptor = NULL;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert Hostname to Internet address info structure
|
* Convert Hostname to Internet address info structure
|
||||||
@ -331,7 +308,7 @@ public:
|
|||||||
cprintf(BLUE,"%d : Streamer: buf: %s\n", index, buf);
|
cprintf(BLUE,"%d : Streamer: buf: %s\n", index, buf);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(zmq_send (socketDescriptor, buf, length, dummy?0:ZMQ_SNDMORE) < 0) {
|
if(zmq_send (sockfd.socketDescriptor, buf, length, dummy?0:ZMQ_SNDMORE) < 0) {
|
||||||
PrintError ();
|
PrintError ();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -348,7 +325,7 @@ public:
|
|||||||
* @returns 0 if error, else 1
|
* @returns 0 if error, else 1
|
||||||
*/
|
*/
|
||||||
int SendData (char* buf, int length) {
|
int SendData (char* buf, int length) {
|
||||||
if(zmq_send (socketDescriptor, buf, length, 0) < 0) {
|
if(zmq_send (sockfd.socketDescriptor, buf, length, 0) < 0) {
|
||||||
PrintError ();
|
PrintError ();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -366,7 +343,7 @@ public:
|
|||||||
* @returns length of message, -1 if error
|
* @returns length of message, -1 if error
|
||||||
*/
|
*/
|
||||||
int ReceiveMessage(const int index, zmq_msg_t& message) {
|
int ReceiveMessage(const int index, zmq_msg_t& message) {
|
||||||
int length = zmq_msg_recv (&message, socketDescriptor, 0);
|
int length = zmq_msg_recv (&message, sockfd.socketDescriptor, 0);
|
||||||
if (length == -1) {
|
if (length == -1) {
|
||||||
PrintError ();
|
PrintError ();
|
||||||
cprintf (BG_RED,"Error: Could not read header for socket %d\n",index);
|
cprintf (BG_RED,"Error: Could not read header for socket %d\n",index);
|
||||||
@ -393,7 +370,7 @@ public:
|
|||||||
// zmq_msg_init (&message);
|
// zmq_msg_init (&message);
|
||||||
// int len = ReceiveMessage(index, message);
|
// int len = ReceiveMessage(index, message);
|
||||||
std::vector<char>buffer(MAX_STR_LENGTH);
|
std::vector<char>buffer(MAX_STR_LENGTH);
|
||||||
int len = zmq_recv(socketDescriptor, buffer.data(), buffer.size(),0);
|
int len = zmq_recv(sockfd.socketDescriptor, buffer.data(), buffer.size(),0);
|
||||||
if ( len > 0 ) {
|
if ( len > 0 ) {
|
||||||
bool dummy = false;
|
bool dummy = false;
|
||||||
#ifdef ZMQ_DETAIL
|
#ifdef ZMQ_DETAIL
|
||||||
@ -462,29 +439,6 @@ public:
|
|||||||
dummy = temp ? false : true;
|
dummy = temp ? false : true;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
/*
|
|
||||||
int temp = d["data"].GetUint();
|
|
||||||
dummy = temp ? false : true;
|
|
||||||
if (!dummy) {
|
|
||||||
acqIndex = d["acqIndex"].GetUint64();
|
|
||||||
frameIndex = d["fIndex"].GetUint64();
|
|
||||||
fileIndex = d["fileIndex"].GetUint64();
|
|
||||||
subframeIndex = d["expLength"].GetUint();
|
|
||||||
filename = d["fname"].GetString();
|
|
||||||
}
|
|
||||||
#ifdef VERYVERBOSE
|
|
||||||
cprintf(BLUE,"%d Dummy:%d\n"
|
|
||||||
"\tAcqIndex:%lu\n"
|
|
||||||
"\tFrameIndex:%lu\n"
|
|
||||||
"\tSubIndex:%u\n"
|
|
||||||
"\tFileIndex:%lu\n"
|
|
||||||
"\tBitMode:%u\n"
|
|
||||||
"\tDetType:%u\n",
|
|
||||||
index, (int)dummy, acqIndex, frameIndex, subframeIndex, fileIndex,
|
|
||||||
d["bitmode"].GetUint(),d["detType"].GetUint());
|
|
||||||
#endif
|
|
||||||
return 1;
|
|
||||||
*/
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -586,24 +540,60 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to close socket descriptors automatically
|
||||||
|
* upon encountering exceptions in the ZmqSocket constructor
|
||||||
|
*/
|
||||||
|
class mySocketDescriptors {
|
||||||
|
public:
|
||||||
|
/** Constructor */
|
||||||
|
mySocketDescriptors():
|
||||||
|
server(false),
|
||||||
|
contextDescriptor(0),
|
||||||
|
socketDescriptor(0) {};
|
||||||
|
/** Destructor */
|
||||||
|
~mySocketDescriptors() {
|
||||||
|
Disconnect();
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
/** Unbinds the Socket */
|
||||||
|
void Disconnect () {
|
||||||
|
if (server)
|
||||||
|
zmq_unbind (socketDescriptor, serverAddress);
|
||||||
|
else
|
||||||
|
zmq_disconnect (socketDescriptor, serverAddress);
|
||||||
|
};
|
||||||
|
/** Close Socket and destroy Context */
|
||||||
|
void Close () {
|
||||||
|
if (socketDescriptor != NULL) {
|
||||||
|
zmq_close (socketDescriptor);
|
||||||
|
socketDescriptor = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (contextDescriptor != NULL) {
|
||||||
|
zmq_ctx_destroy (contextDescriptor);
|
||||||
|
contextDescriptor = NULL;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/** true if server, else false */
|
||||||
|
bool server;
|
||||||
|
/** Server Address */
|
||||||
|
char serverAddress[1000];
|
||||||
|
/** Context Descriptor */
|
||||||
|
void* contextDescriptor;
|
||||||
|
/** Socket Descriptor */
|
||||||
|
void* socketDescriptor;
|
||||||
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** Port Number */
|
/** Port Number */
|
||||||
uint32_t portno;
|
uint32_t portno;
|
||||||
|
|
||||||
/** true if server, else false */
|
/** Socket descriptor */
|
||||||
bool server;
|
mySocketDescriptors sockfd;
|
||||||
|
|
||||||
/** Context Descriptor */
|
|
||||||
void* contextDescriptor;
|
|
||||||
|
|
||||||
/** Socket Descriptor */
|
|
||||||
void* socketDescriptor;
|
|
||||||
|
|
||||||
/** Server Address */
|
|
||||||
char serverAddress[MAX_STR_LENGTH];
|
|
||||||
|
|
||||||
/** Header Message pointer */
|
/** Header Message pointer */
|
||||||
// zmq_msg_t* headerMessage;
|
//zmq_msg_t* headerMessage;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -50,31 +50,6 @@ using namespace std;
|
|||||||
#define DEFAULT_BACKLOG 5
|
#define DEFAULT_BACKLOG 5
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class to close socket descriptors automatically
|
|
||||||
* upon encountering exceptions in the constructor
|
|
||||||
*/
|
|
||||||
class mySocketDescriptors {
|
|
||||||
public:
|
|
||||||
mySocketDescriptors():fd(-1), newfd(-1){};
|
|
||||||
~mySocketDescriptors() {
|
|
||||||
// close TCP server new socket descriptor from accept
|
|
||||||
if (newfd >= 0) {
|
|
||||||
close(newfd);
|
|
||||||
}
|
|
||||||
// close socket descriptor
|
|
||||||
if (fd >= 0) {
|
|
||||||
close(fd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/** socket descriptor */
|
|
||||||
int fd;
|
|
||||||
/** new socket descriptor in TCP server from accept */
|
|
||||||
int newfd;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class genericSocket{
|
class genericSocket{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -814,6 +789,33 @@ public:
|
|||||||
char thisClientIP[INET_ADDRSTRLEN];
|
char thisClientIP[INET_ADDRSTRLEN];
|
||||||
int differentClients;
|
int differentClients;
|
||||||
|
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* Class to close socket descriptors automatically
|
||||||
|
* upon encountering exceptions in the genericSocket constructor
|
||||||
|
*/
|
||||||
|
class mySocketDescriptors {
|
||||||
|
public:
|
||||||
|
|
||||||
|
/** Constructor */
|
||||||
|
mySocketDescriptors():fd(-1), newfd(-1){};
|
||||||
|
/** Destructor */
|
||||||
|
~mySocketDescriptors() {
|
||||||
|
// close TCP server new socket descriptor from accept
|
||||||
|
if (newfd >= 0) {
|
||||||
|
close(newfd);
|
||||||
|
}
|
||||||
|
// close socket descriptor
|
||||||
|
if (fd >= 0) {
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/** socket descriptor */
|
||||||
|
int fd;
|
||||||
|
/** new socket descriptor in TCP server from accept */
|
||||||
|
int newfd;
|
||||||
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int portno;
|
int portno;
|
||||||
communicationProtocol protocol;
|
communicationProtocol protocol;
|
||||||
|
@ -132,7 +132,8 @@ void DataStreamer::CreateZmqSockets(int* nunits, uint32_t port, const char* srci
|
|||||||
uint32_t portnum = port + index;
|
uint32_t portnum = port + index;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
zmqSocket = new ZmqSocket(portnum, (strlen(srcip)?srcip:NULL));
|
ZmqSocket* z = new ZmqSocket(portnum, (strlen(srcip)?srcip:NULL));
|
||||||
|
zmqSocket = z;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
cprintf(RED, "Error: Could not create Zmq socket on port %d for Streamer %d\n", portnum, index);
|
cprintf(RED, "Error: Could not create Zmq socket on port %d for Streamer %d\n", portnum, index);
|
||||||
throw;
|
throw;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user