From 663e4d480c64e309db72f03638b15a5a572aa4ec Mon Sep 17 00:00:00 2001 From: lrlunin Date: Wed, 6 May 2026 09:56:14 +0200 Subject: [PATCH] update filename in restreamstop --- slsReceiverSoftware/src/DataStreamer.cpp | 46 +++++++--------------- slsReceiverSoftware/src/DataStreamer.h | 9 ++--- slsReceiverSoftware/src/Implementation.cpp | 6 ++- 3 files changed, 22 insertions(+), 39 deletions(-) diff --git a/slsReceiverSoftware/src/DataStreamer.cpp b/slsReceiverSoftware/src/DataStreamer.cpp index 37f322517..29ad04ae6 100644 --- a/slsReceiverSoftware/src/DataStreamer.cpp +++ b/slsReceiverSoftware/src/DataStreamer.cpp @@ -8,7 +8,6 @@ #include "DataStreamer.h" #include "Fifo.h" #include "GeneralData.h" -#include "sls/ZmqSocket.h" #include "sls/sls_detector_exceptions.h" #include @@ -152,8 +151,7 @@ void DataStreamer::ProcessAnImage(sls_detector_header header, size_t size, uint64_t fnum = header.frameNumber; LOG(logDEBUG1) << "DataStreamer " << index << ": fnum:" << fnum; - if (!SendDataHeader(header, size, generalData->nPixelsX, - generalData->nPixelsY)) { + if (!SendDataHeader(header, size)) { LOG(logERROR) << "Could not send zmq header for fnum " << fnum << " and streamer " << index; } @@ -164,17 +162,17 @@ void DataStreamer::ProcessAnImage(sls_detector_header header, size_t size, } } -int DataStreamer::SendDummyHeader() { +zmqHeader DataStreamer::prepareZmqHeader() { zmqHeader zHeader; - zHeader.data = false; zHeader.jsonversion = SLS_DETECTOR_JSON_HEADER_VERSION; - // parameters coming from the receiver software zHeader.fname = fileNametoStream; zHeader.dynamicRange = generalData->dynamicRange; zHeader.fileIndex = fileIndex; zHeader.ndetx = numPorts.x; zHeader.ndety = numPorts.y; + zHeader.npixelsx = generalData->nPixelsX; + zHeader.npixelsy = generalData->nPixelsY; zHeader.flipRows = static_cast(flipRows); zHeader.quad = quadEnable; @@ -186,14 +184,18 @@ int DataStreamer::SendDummyHeader() { } zHeader.addJsonHeader = localAdditionalJsonHeader; zHeader.rx_roi = portRoi.getIntArray(); + return zHeader; +} + +int DataStreamer::SendDummyHeader() { + zmqHeader zHeader = prepareZmqHeader(); + zHeader.data = false; return zmqSocket->SendHeader(index, zHeader); } -int DataStreamer::SendDataHeader(sls_detector_header header, uint32_t size, - uint32_t nx, uint32_t ny) { - zmqHeader zHeader; +int DataStreamer::SendDataHeader(sls_detector_header header, uint32_t size) { + zmqHeader zHeader = prepareZmqHeader(); zHeader.data = true; - zHeader.jsonversion = SLS_DETECTOR_JSON_HEADER_VERSION; // parameter coming from the detector (raw and derived) uint64_t frameIndex = header.frameNumber - firstIndex; @@ -219,31 +221,11 @@ int DataStreamer::SendDataHeader(sls_detector_header header, uint32_t size, zHeader.detType = header.detType; zHeader.version = header.version; - // parameters coming from the receiver software - zHeader.fname = fileNametoStream; - zHeader.dynamicRange = generalData->dynamicRange; - zHeader.fileIndex = fileIndex; - zHeader.ndetx = numPorts.x; - zHeader.ndety = numPorts.y; - zHeader.npixelsx = nx; - zHeader.npixelsy = ny; - zHeader.imageSize = size; - zHeader.flipRows = static_cast(flipRows); - zHeader.quad = quadEnable; - - // update local copy only if it was updated (to prevent locking each time) - if (isAdditionalJsonUpdated) { - std::lock_guard lock(additionalJsonMutex); - localAdditionalJsonHeader = additionalJsonHeader; - isAdditionalJsonUpdated = false; - } - zHeader.addJsonHeader = localAdditionalJsonHeader; - zHeader.rx_roi = portRoi.getIntArray(); - return zmqSocket->SendHeader(index, zHeader); } -void DataStreamer::RestreamStop() { +void DataStreamer::RestreamStop(const std::string &fname) { + fileNametoStream = fname; if (!SendDummyHeader()) { throw RuntimeError("Could not restream Dummy Header via ZMQ for port " + std::to_string(zmqSocket->GetPortNumber())); diff --git a/slsReceiverSoftware/src/DataStreamer.h b/slsReceiverSoftware/src/DataStreamer.h index d8eaaabcf..69b6ee30d 100644 --- a/slsReceiverSoftware/src/DataStreamer.h +++ b/slsReceiverSoftware/src/DataStreamer.h @@ -10,6 +10,7 @@ */ #include "ThreadObject.h" +#include "sls/ZmqSocket.h" #include "sls/network_utils.h" #include @@ -49,7 +50,7 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject { */ void CreateZmqSockets(uint16_t port, int hwm); void CloseZmqSocket(); - void RestreamStop(); + void RestreamStop(const std::string &fname); private: /** @@ -71,18 +72,16 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject { */ void ProcessAnImage(sls_detector_header header, size_t size, char *data); + zmqHeader prepareZmqHeader(); int SendDummyHeader(); /** * Create and send Json Header * @param rheader header of image * @param size data size (could have been modified in call back) - * @param nx number of pixels in x dim - * @param ny number of pixels in y dim * @returns 0 if error, else 1 */ - int SendDataHeader(sls_detector_header header, uint32_t size = 0, - uint32_t nx = 0, uint32_t ny = 0); + int SendDataHeader(sls_detector_header header, uint32_t size = 0); static const std::string TypeName; const GeneralData *generalData{nullptr}; diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 292c5df29..c99d471de 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -843,8 +843,10 @@ void Implementation::shutDownUDPSockets() { } void Implementation::restreamStop() { - for (const auto &it : dataStreamer) - it->RestreamStop(); + for (const auto &it : dataStreamer) { + std::string fnametostream = (filePath / fileName).string(); + it->RestreamStop(fnametostream); + } LOG(logINFO) << "Restreaming Dummy Header via ZMQ successful"; }