mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-05-01 10:20:04 +02:00
json para and header added
This commit is contained in:
parent
b4c31327d6
commit
d8aa1ab08e
@ -14,6 +14,9 @@ void Receiver::sendToReceiver(int fnum, const void *args, size_t args_size,
|
|||||||
|
|
||||||
void Receiver::sendToReceiver(int fnum, const void *args, size_t args_size,
|
void Receiver::sendToReceiver(int fnum, const void *args, size_t args_size,
|
||||||
void *retval, size_t retval_size) const {
|
void *retval, size_t retval_size) const {
|
||||||
|
if (strlen(shm()->hostname) == 0) {
|
||||||
|
throw RuntimeError("Reciver not added");
|
||||||
|
}
|
||||||
auto receiver = ReceiverSocket(shm()->hostname, shm()->tcpPort);
|
auto receiver = ReceiverSocket(shm()->hostname, shm()->tcpPort);
|
||||||
receiver.sendCommandThenRead(fnum, args, args_size, retval, retval_size);
|
receiver.sendCommandThenRead(fnum, args, args_size, retval, retval_size);
|
||||||
receiver.close();
|
receiver.close();
|
||||||
@ -268,8 +271,8 @@ sls::MacAddr Receiver::configure(slsDetectorDefs::rxParameters arg) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (arg.detType == MOENCH) {
|
if (arg.detType == MOENCH) {
|
||||||
//setAdditionalJsonParameter("adcmask_1g", std::to_string(arg.adcMask));
|
setAdditionalJsonParameter("adcmask_1g", std::to_string(arg.adcMask));
|
||||||
//setAdditionalJsonParameter("adcmask_10g", std::to_string(arg.adc10gMask));
|
setAdditionalJsonParameter("adcmask_10g", std::to_string(arg.adc10gMask));
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG(logINFOBLUE) << receiverId << " configured!";
|
LOG(logINFOBLUE) << receiverId << " configured!";
|
||||||
@ -346,5 +349,90 @@ void Receiver::restreamStop() {
|
|||||||
sendToReceiver(F_RESTREAM_STOP_FROM_RECEIVER, nullptr, nullptr);
|
sendToReceiver(F_RESTREAM_STOP_FROM_RECEIVER, nullptr, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Detector Specific */
|
||||||
|
// Moench
|
||||||
|
|
||||||
|
void Receiver::setAdditionalJsonHeader(const std::map<std::string, std::string> &jsonHeader) {
|
||||||
|
for (auto &it : jsonHeader) {
|
||||||
|
if (it.first.empty() || it.first.length() > SHORT_STR_LENGTH ||
|
||||||
|
it.second.length() > SHORT_STR_LENGTH ) {
|
||||||
|
throw RuntimeError(it.first + " or " + it.second + " pair has invalid size. "
|
||||||
|
"Key cannot be empty. Both can have max 20 characters");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const int size = jsonHeader.size();
|
||||||
|
int fnum = F_SET_ADDITIONAL_JSON_HEADER;
|
||||||
|
int ret = FAIL;
|
||||||
|
LOG(logDEBUG) << "Sending to receiver additional json header " << ToString(jsonHeader);
|
||||||
|
auto client = ReceiverSocket(shm()->hostname, shm()->tcpPort);
|
||||||
|
client.Send(&fnum, sizeof(fnum));
|
||||||
|
client.Send(&size, sizeof(size));
|
||||||
|
if (size > 0) {
|
||||||
|
char args[size * 2][SHORT_STR_LENGTH];
|
||||||
|
memset(args, 0, sizeof(args));
|
||||||
|
int iarg = 0;
|
||||||
|
for (auto &it : jsonHeader) {
|
||||||
|
sls::strcpy_safe(args[iarg], it.first.c_str());
|
||||||
|
sls::strcpy_safe(args[iarg + 1], it.second.c_str());
|
||||||
|
iarg += 2;
|
||||||
|
}
|
||||||
|
client.Send(args, sizeof(args));
|
||||||
|
}
|
||||||
|
client.Receive(&ret, sizeof(ret));
|
||||||
|
if (ret == FAIL) {
|
||||||
|
char mess[MAX_STR_LENGTH]{};
|
||||||
|
client.Receive(mess, MAX_STR_LENGTH);
|
||||||
|
throw RuntimeError("Receiver " + std::to_string(moduleId) +
|
||||||
|
" returned error: " + std::string(mess));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<std::string, std::string> Receiver::getAdditionalJsonHeader() {
|
||||||
|
int fnum = F_GET_ADDITIONAL_JSON_HEADER;
|
||||||
|
int ret = FAIL;
|
||||||
|
int size = 0;
|
||||||
|
auto client = ReceiverSocket(shm()->hostname, shm()->tcpPort);
|
||||||
|
client.Send(&fnum, sizeof(fnum));
|
||||||
|
client.Receive(&ret, sizeof(ret));
|
||||||
|
if (ret == FAIL) {
|
||||||
|
char mess[MAX_STR_LENGTH]{};
|
||||||
|
client.Receive(mess, MAX_STR_LENGTH);
|
||||||
|
throw RuntimeError("Receiver " + std::to_string(moduleId) +
|
||||||
|
" returned error: " + std::string(mess));
|
||||||
|
} else {
|
||||||
|
client.Receive(&size, sizeof(size));
|
||||||
|
std::map<std::string, std::string> retval;
|
||||||
|
if (size > 0) {
|
||||||
|
char retvals[size * 2][SHORT_STR_LENGTH];
|
||||||
|
memset(retvals, 0, sizeof(retvals));
|
||||||
|
client.Receive(retvals, sizeof(retvals));
|
||||||
|
for (int i = 0; i < size; ++i) {
|
||||||
|
retval[retvals[2 * i]] = retvals[2 * i + 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LOG(logDEBUG) << "Getting additional json header " << ToString(retval);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Receiver::setAdditionalJsonParameter(const std::string &key, const std::string &value) {
|
||||||
|
if (key.empty() || key.length() > SHORT_STR_LENGTH ||
|
||||||
|
value.length() > SHORT_STR_LENGTH ) {
|
||||||
|
throw RuntimeError(key + " or " + value + " pair has invalid size. "
|
||||||
|
"Key cannot be empty. Both can have max 2 characters");
|
||||||
|
}
|
||||||
|
char args[2][SHORT_STR_LENGTH]{};
|
||||||
|
sls::strcpy_safe(args[0], key.c_str());
|
||||||
|
sls::strcpy_safe(args[1], value.c_str());
|
||||||
|
sendToReceiver(F_SET_ADDITIONAL_JSON_PARAMETER, args, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Receiver::getAdditionalJsonParameter(const std::string &key) {
|
||||||
|
char arg[SHORT_STR_LENGTH]{};
|
||||||
|
sls::strcpy_safe(arg, key.c_str());
|
||||||
|
char retval[SHORT_STR_LENGTH]{};
|
||||||
|
sendToReceiver(F_GET_ADDITIONAL_JSON_PARAMETER, arg, retval);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace sls
|
} // namespace sls
|
@ -4,6 +4,8 @@
|
|||||||
#include "sls_detector_defs.h"
|
#include "sls_detector_defs.h"
|
||||||
#include "network_utils.h"
|
#include "network_utils.h"
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
|
||||||
#define RECEIVER_SHMVERSION 0x200417
|
#define RECEIVER_SHMVERSION 0x200417
|
||||||
|
|
||||||
namespace sls {
|
namespace sls {
|
||||||
@ -90,22 +92,24 @@ namespace sls {
|
|||||||
* ZMQ Streaming Parameters (Receiver<->Client)*
|
* ZMQ Streaming Parameters (Receiver<->Client)*
|
||||||
* *
|
* *
|
||||||
* ************************************************/
|
* ************************************************/
|
||||||
|
|
||||||
/**************************************************
|
/**************************************************
|
||||||
* *
|
* *
|
||||||
* Detector Specific *
|
* Detector Specific *
|
||||||
* *
|
* *
|
||||||
* ************************************************/
|
* ************************************************/
|
||||||
|
// Moench
|
||||||
|
/** empty vector deletes entire additional json header */
|
||||||
|
void setAdditionalJsonHeader(const std::map<std::string, std::string> &jsonHeader);
|
||||||
|
std::map<std::string, std::string> getAdditionalJsonHeader();
|
||||||
|
|
||||||
|
/** Sets the value for the additional json header parameter key if found,
|
||||||
|
else append it. If value empty, then deletes parameter */
|
||||||
|
void setAdditionalJsonParameter(const std::string &key, const std::string &value);
|
||||||
|
std::string getAdditionalJsonParameter(const std::string &key);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
|
||||||
* Send function parameters to receiver
|
|
||||||
* @param fnum function enum
|
|
||||||
* @param args argument pointer
|
|
||||||
* @param args_size size of argument
|
|
||||||
* @param retval return pointers
|
|
||||||
* @param retval_size size of return value
|
|
||||||
*/
|
|
||||||
void sendToReceiver(int fnum, const void *args, size_t args_size,
|
void sendToReceiver(int fnum, const void *args, size_t args_size,
|
||||||
void *retval, size_t retval_size);
|
void *retval, size_t retval_size);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user