mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-13 21:37:13 +02:00
Zmqsocket merge with Erik's (removing header message) and mine(socketdescriptor safe destruction in constructor exception)
This commit is contained in:
@ -4962,7 +4962,7 @@ void multiSlsDetector::readFrameFromReceiver() {
|
||||
rapidjson::Document doc;
|
||||
if (!zmqSocket[isocket]->ReceiveHeader(isocket, doc,
|
||||
SLS_DETECTOR_JSON_HEADER_VERSION)) {
|
||||
zmqSocket[isocket]->CloseHeaderMessage();
|
||||
// zmqSocket[isocket]->CloseHeaderMessage();
|
||||
// parse error, version error or end of acquisition for socket
|
||||
runningList[isocket] = false;
|
||||
--numRunning;
|
||||
@ -5023,7 +5023,7 @@ void multiSlsDetector::readFrameFromReceiver() {
|
||||
coordX, coordY,
|
||||
flippedDataX);
|
||||
#endif
|
||||
zmqSocket[isocket]->CloseHeaderMessage();
|
||||
// zmqSocket[isocket]->CloseHeaderMessage();
|
||||
}
|
||||
|
||||
// DATA
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include <rapidjson/document.h> //json header in zmq stream
|
||||
#include <string.h>
|
||||
#include <unistd.h> //usleep in some machines
|
||||
#include <vector>
|
||||
using namespace rapidjson;
|
||||
|
||||
|
||||
@ -36,8 +37,6 @@ public:
|
||||
// eg. int value = -1;
|
||||
// if (zmq_setsockopt(socketDescriptor, ZMQ_LINGER, &value,sizeof(value))) {
|
||||
// Close();
|
||||
// }
|
||||
|
||||
/**
|
||||
* Constructor for a client
|
||||
* Creates socket, context and connects to server
|
||||
@ -45,7 +44,9 @@ public:
|
||||
* @param portnumber port number
|
||||
*/
|
||||
ZmqSocket (const char* const hostname_or_ip, const uint32_t portnumber):
|
||||
portno (portnumber) {
|
||||
portno (portnumber)
|
||||
// headerMessage(0)
|
||||
{
|
||||
char ip[MAX_STR_LENGTH] = "";
|
||||
memset(ip, 0, MAX_STR_LENGTH);
|
||||
|
||||
@ -100,7 +101,10 @@ public:
|
||||
* @param ethip is the ip of the ethernet interface to stream zmq from
|
||||
*/
|
||||
ZmqSocket (const uint32_t portnumber, const char *ethip):
|
||||
portno (portnumber) {
|
||||
|
||||
portno (portnumber)
|
||||
// headerMessage(0)
|
||||
{
|
||||
sockfd.server = true;
|
||||
|
||||
// create context
|
||||
@ -361,18 +365,20 @@ public:
|
||||
*/
|
||||
int ReceiveHeader(const int index, Document& document, uint32_t version)
|
||||
{
|
||||
zmq_msg_t message;
|
||||
headerMessage= &message;
|
||||
zmq_msg_init (&message);
|
||||
int len = ReceiveMessage(index, message);
|
||||
// zmq_msg_t message;
|
||||
// headerMessage= &message;
|
||||
// zmq_msg_init (&message);
|
||||
// int len = ReceiveMessage(index, message);
|
||||
std::vector<char>buffer(MAX_STR_LENGTH);
|
||||
int len = zmq_recv(socketDescriptor, buffer.data(), buffer.size(),0);
|
||||
if ( len > 0 ) {
|
||||
bool dummy = false;
|
||||
#ifdef ZMQ_DETAIL
|
||||
cprintf( BLUE,"Header %d [%d] Length: %d Header:%s \n", index, portno, len, (char*) zmq_msg_data (&message) );
|
||||
cprintf( BLUE,"Header %d [%d] Length: %d Header:%s \n", index, portno, len, buffer.data());
|
||||
#endif
|
||||
if ( ParseHeader (index, len, message, document, dummy, version)) {
|
||||
if ( ParseHeader (index, len, buffer.data(), document, dummy, version)) {
|
||||
#ifdef ZMQ_DETAIL
|
||||
cprintf( RED,"Parsed Header %d [%d] Length: %d Header:%s \n", index, portno, len, (char*) zmq_msg_data (&message) );
|
||||
cprintf( RED,"Parsed Header %d [%d] Length: %d Header:%s \n", index, portno, len, buffer.data() );
|
||||
#endif
|
||||
if (dummy) {
|
||||
#ifdef ZMQ_DETAIL
|
||||
@ -393,11 +399,11 @@ public:
|
||||
/**
|
||||
* Close Header Message. Call this function if ReceiveHeader returned 1
|
||||
*/
|
||||
void CloseHeaderMessage() {
|
||||
if (headerMessage)
|
||||
zmq_msg_close(headerMessage);
|
||||
headerMessage = 0;
|
||||
};
|
||||
// void CloseHeaderMessage() {
|
||||
// if (headerMessage)
|
||||
// zmq_msg_close(headerMessage);
|
||||
// headerMessage = 0;
|
||||
// };
|
||||
/**
|
||||
* Parse Header
|
||||
* @param index self index for debugging
|
||||
@ -408,15 +414,15 @@ public:
|
||||
* @param version version that has to match, -1 to not care
|
||||
* @returns true if successful else false
|
||||
*/
|
||||
int ParseHeader(const int index, int length, zmq_msg_t& message,
|
||||
int ParseHeader(const int index, int length, char* buff,
|
||||
Document& document, bool& dummy, uint32_t version)
|
||||
{
|
||||
if ( document.Parse( (char*) zmq_msg_data (&message), zmq_msg_size (&message)).HasParseError() ) {
|
||||
cprintf( RED,"%d Could not parse. len:%d: Message:%s \n", index, length, (char*) zmq_msg_data (&message) );
|
||||
if ( document.Parse( buff, length).HasParseError() ) {
|
||||
cprintf( RED,"%d Could not parse. len:%d: Message:%s \n", index, length, buff );
|
||||
fflush ( stdout );
|
||||
char* buf = (char*) zmq_msg_data (&message);
|
||||
// char* buf = (char*) zmq_msg_data (&message);
|
||||
for ( int i= 0; i < length; ++i ) {
|
||||
cprintf(RED,"%02x ",buf[i]);
|
||||
cprintf(RED,"%02x ",buff[i]);
|
||||
}
|
||||
printf("\n");
|
||||
fflush( stdout );
|
||||
@ -589,5 +595,5 @@ private:
|
||||
mySocketDescriptors sockfd;
|
||||
|
||||
/** Header Message pointer */
|
||||
zmq_msg_t* headerMessage;
|
||||
//zmq_msg_t* headerMessage;
|
||||
};
|
||||
|
Reference in New Issue
Block a user