mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-12 21:07:13 +02:00
in between
This commit is contained in:
@ -48,7 +48,8 @@ public:
|
||||
portno (portnumber),
|
||||
server (false),
|
||||
contextDescriptor (NULL),
|
||||
socketDescriptor (NULL)
|
||||
socketDescriptor (NULL),
|
||||
headerMessage(0)
|
||||
{
|
||||
char ip[MAX_STR_LENGTH] = "";
|
||||
memset(ip, 0, MAX_STR_LENGTH);
|
||||
@ -104,7 +105,8 @@ public:
|
||||
portno (portnumber),
|
||||
server (true),
|
||||
contextDescriptor (NULL),
|
||||
socketDescriptor (NULL)
|
||||
socketDescriptor (NULL),
|
||||
headerMessage(0)
|
||||
{
|
||||
// create context
|
||||
contextDescriptor = zmq_ctx_new();
|
||||
@ -365,19 +367,16 @@ public:
|
||||
|
||||
|
||||
/**
|
||||
* Receive Header
|
||||
* Receive Header (Important to close message after parsing header)
|
||||
* @param index self index for debugging
|
||||
* @param acqIndex address of acquisition index
|
||||
* @param frameIndex address of frame index
|
||||
* @param subframeIndex address of subframe index
|
||||
* @param filename address of file name
|
||||
* @param fileindex address of file index
|
||||
* @returns 0 if error or end of acquisition, else 1
|
||||
* @param document parsed document reference
|
||||
* @param version version that has to match, -1 to not care
|
||||
* @returns 0 if error or end of acquisition, else 1 (call CloseHeaderMessage after parsing header)
|
||||
*/
|
||||
int ReceiveHeader(const int index, uint64_t &acqIndex,
|
||||
uint64_t &frameIndex, uint32_t &subframeIndex, std::string &filename, uint64_t &fileIndex)
|
||||
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);
|
||||
if ( len > 0 ) {
|
||||
@ -385,11 +384,10 @@ public:
|
||||
#ifdef ZMQ_DETAIL
|
||||
cprintf( BLUE,"Header %d [%d] Length: %d Header:%s \n", index, portno, len, (char*) zmq_msg_data (&message) );
|
||||
#endif
|
||||
if ( ParseHeader (index, len, message, acqIndex, frameIndex, subframeIndex, filename, fileIndex, dummy)) {
|
||||
if ( ParseHeader (index, len, message, 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) );
|
||||
#endif
|
||||
zmq_msg_close (&message);
|
||||
if (dummy) {
|
||||
#ifdef ZMQ_DETAIL
|
||||
cprintf(RED,"%d [%d] Received end of acquisition\n", index, portno );
|
||||
@ -402,10 +400,79 @@ public:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
zmq_msg_close(&message);
|
||||
return 0;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Close Header Message. Call this function if ReceiveHeader returned 1
|
||||
*/
|
||||
void CloseHeaderMessage() {
|
||||
if (headerMessage)
|
||||
zmq_msg_close(headerMessage);
|
||||
headerMessage = 0;
|
||||
};
|
||||
/**
|
||||
* Parse Header
|
||||
* @param index self index for debugging
|
||||
* @param length length of message
|
||||
* @param message message
|
||||
* @param document parsed document reference
|
||||
* @param dummy true if end of acqusition, else false, loaded upon parsing
|
||||
* @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,
|
||||
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) );
|
||||
fflush ( stdout );
|
||||
char* buf = (char*) zmq_msg_data (&message);
|
||||
for ( int i= 0; i < length; ++i ) {
|
||||
cprintf(RED,"%02x ",buf[i]);
|
||||
}
|
||||
printf("\n");
|
||||
fflush( stdout );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (document["jsonversion"].GetUint() != version) {
|
||||
cprintf( RED, "version mismatch. required %u, got %u\n", version, document["jsonversion"].GetUint());
|
||||
return 0;
|
||||
}
|
||||
|
||||
dummy = false;
|
||||
int temp = document["data"].GetUint();
|
||||
dummy = temp ? false : true;
|
||||
|
||||
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;
|
||||
*/
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Receive Data
|
||||
* @param index self index for debugging
|
||||
@ -446,65 +513,6 @@ public:
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Parse Header
|
||||
* @param index self index for debugging
|
||||
* @param length length of message
|
||||
* @param message message
|
||||
* @param acqIndex address of acquisition index
|
||||
* @param frameIndex address of frame index
|
||||
* @param subframeIndex address of subframe index
|
||||
* @param filename address of file name
|
||||
* @param fileindex address of file index
|
||||
* @param dummy true if end of acquisition else false
|
||||
* @returns true if successfull else false
|
||||
*/
|
||||
int ParseHeader(const int index, int length, zmq_msg_t& message, uint64_t &acqIndex,
|
||||
uint64_t &frameIndex, uint32_t &subframeIndex, std::string &filename, uint64_t &fileIndex, bool& dummy)
|
||||
{
|
||||
|
||||
acqIndex = -1;
|
||||
frameIndex = -1;
|
||||
subframeIndex = -1;
|
||||
fileIndex = -1;
|
||||
dummy = true;
|
||||
|
||||
Document d;
|
||||
if ( d.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) );
|
||||
fflush ( stdout );
|
||||
char* buf = (char*) zmq_msg_data (&message);
|
||||
for ( int i= 0; i < length; ++i ) {
|
||||
cprintf(RED,"%02x ",buf[i]);
|
||||
}
|
||||
printf("\n");
|
||||
fflush( stdout );
|
||||
return 0;
|
||||
}
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Print error
|
||||
@ -580,4 +588,7 @@ private:
|
||||
/** Server Address */
|
||||
char serverAddress[1000];
|
||||
|
||||
/** Header Message pointer */
|
||||
zmq_msg_t* headerMessage;
|
||||
|
||||
};
|
||||
|
Reference in New Issue
Block a user