WIP, moved bool primaryinterface to an int interface_id

This commit is contained in:
2020-04-21 14:34:48 +02:00
parent d8aa1ab08e
commit 6b5511c9e5
7 changed files with 42 additions and 56 deletions

View File

@ -6846,14 +6846,11 @@ int get_receiver_parameters(int file_des) {
n += sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// multisize
i32 = 0;
n += sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
i32 = 0;
n += sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// detId
i32 = 0;
n += sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// hostname
@ -6863,14 +6860,10 @@ int get_receiver_parameters(int file_des) {
n += sendData(file_des, hostname, MAX_STR_LENGTH, OTHER);
if (n < 0) return printSocketReadError();
}
// primary interface
{
char c = '0';
n += sendData(file_des, &c, 1, OTHER);
if (n < 0) return printSocketReadError();
}
// interface id
n += sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// zmq ip
i32 = 0;
n += sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
// end of shared memory variables in struct

View File

@ -213,8 +213,8 @@ void DetectorImpl::initializeMembers(bool verify) {
receivers.resize(numModules);
for (int iReceiver = 0; iReceiver < numReceivers; ++iReceiver) {
receivers[iModule].push_back(
sls::make_unique<Receiver>(detectorId, iModule, iReceiver,
true, verify));
sls::make_unique<Receiver>(detectorId, iModule, 0,
iReceiver, verify));
}
}
int numReceivers2 = detectors[iModule]->getNumberOfReceivers2();
@ -222,8 +222,8 @@ void DetectorImpl::initializeMembers(bool verify) {
receivers2.resize(numModules);
for (int iReceiver = 0; iReceiver < numReceivers2; ++iReceiver) {
receivers2[iModule].push_back(
sls::make_unique<Receiver>(detectorId, iModule, iReceiver,
false, verify));
sls::make_unique<Receiver>(detectorId, iModule, 1,
iReceiver, verify));
}
}
}
@ -373,7 +373,7 @@ void DetectorImpl::initReceiver(const int udpInterface) {
receivers.resize(detectors.size());
receivers[iModule].push_back(
sls::make_unique<Receiver>(detectorId, iModule, 0,
true, tcpPort++, "", zmqPort++));
0, tcpPort++, "", zmqPort++));
detectors[iModule]->setNumberOfReceivers(1);
}
} catch (...) {
@ -390,8 +390,8 @@ void DetectorImpl::initReceiver(const int udpInterface) {
for (int iModule = 0; iModule < size(); ++iModule) {
receivers2.resize(detectors.size());
receivers2[iModule].push_back(
sls::make_unique<Receiver>(detectorId, iModule, 0,
false, tcpPort++, "", zmqPort++));
sls::make_unique<Receiver>(detectorId, iModule, 1,
0, tcpPort++, "", zmqPort++));
detectors[iModule]->setNumberOfReceivers2(1);
}
} catch (...) {

View File

@ -99,11 +99,11 @@ Ret Receiver::sendToReceiver(int fnum, const Arg &args) const{
// create shm
Receiver::Receiver(int detector_id, int module_id, int receiver_id,
bool primaryInterface, int tcp_port, std::string hostname,
Receiver::Receiver(int detector_id, int module_id, int interface_id,
int receiver_id, int tcp_port, std::string hostname,
int zmq_port) :
receiverId(receiver_id), moduleId(module_id),
shm(detector_id, module_id, receiver_id, primaryInterface) {
receiverId(receiver_id), interfaceId(interface_id), moduleId(module_id),
shm(detector_id, module_id, interface_id, receiver_id) {
// ensure shared memory was not created before
if (shm.IsExisting()) {
@ -112,15 +112,14 @@ Receiver::Receiver(int detector_id, int module_id, int receiver_id,
<< shm.GetName() << ". Freeing it again";
shm.RemoveSharedMemory();
}
shm = SharedMemory<sharedReceiver>(detector_id, module_id, receiver_id,
primaryInterface);
shm = SharedMemory<sharedReceiver>(detector_id, module_id, interface_id,
receiver_id);
shm.CreateSharedMemory();
// initalize receiver structure
shm()->shmversion = RECEIVER_SHMVERSION;
memset(shm()->hostname, 0, MAX_STR_LENGTH);
shm()->tcpPort = DEFAULT_RX_PORTNO + receiver_id;
shm()->primaryInterface = primaryInterface;
shm()-> stoppedFlag = false;
shm()->zmqPort = DEFAULT_ZMQ_RX_PORTNO + receiver_id;
shm()->zmqIp = IpAddr{};
@ -138,10 +137,10 @@ Receiver::Receiver(int detector_id, int module_id, int receiver_id,
}
// open shm
Receiver::Receiver(int detector_id, int module_id, int receiver_id,
bool primaryInterface, bool verify) :
receiverId(receiver_id), moduleId(module_id),
shm(detector_id, module_id, receiver_id, primaryInterface) {
Receiver::Receiver(int detector_id, int module_id, int interface_id,
int receiver_id, bool verify) :
receiverId(receiver_id), interfaceId(interface_id), moduleId(module_id),
shm(detector_id, module_id, interface_id, receiver_id) {
shm.OpenSharedMemory();
if (verify && shm()->shmversion != RECEIVER_SHMVERSION) {
std::ostringstream ss;
@ -205,8 +204,8 @@ sls::MacAddr Receiver::configure(slsDetectorDefs::rxParameters arg) {
// hostname
memset(arg.hostname, 0, sizeof(arg.hostname));
strcpy_safe(arg.hostname, shm()->hostname);
// primary interface
arg.primaryInterface = shm()->primaryInterface;
// interface id
arg.interfaceId = interfaceId;
// zmqip
{
sls::IpAddr ip;
@ -230,7 +229,7 @@ sls::MacAddr Receiver::configure(slsDetectorDefs::rxParameters arg) {
<< "detectorSize.y:" << arg.detectorSize.y << std::endl
<< "moduleId:" << arg.moduleId << std::endl
<< "hostname:" << arg.hostname << std::endl
<< "primary Interace: " << arg.primaryInterface << std::endl
<< "interfaceId: " << arg.interfaceId << std::endl
<< "zmq ip:" << arg.zmq_ip << std::endl
<< "udpInterfaces:" << arg.udpInterfaces << std::endl
<< "udp_dstport:" << arg.udp_dstport << std::endl

View File

@ -6,7 +6,7 @@
#include <map>
#define RECEIVER_SHMVERSION 0x200417
#define RECEIVER_SHMVERSION 0x200421
namespace sls {
struct sharedReceiver {
@ -15,7 +15,6 @@ namespace sls {
int shmversion;
char hostname[MAX_STR_LENGTH];
int tcpPort;
bool primaryInterface;
/** END OF FIXED PATTERN -----------------------------------------------*/
int stoppedFlag;
@ -28,12 +27,12 @@ namespace sls {
public:
static size_t getNumReceivers();
// create shm
explicit Receiver(int detector_id, int module_id, int receiver_id,
bool primaryInterface, int tcp_port = 0, std::string hostname = "",
explicit Receiver(int detector_id, int module_id, int interface_id,
int receiver_id, int tcp_port = 0, std::string hostname = "",
int zmq_port = 0);
// open shm
explicit Receiver(int detector_id, int module_id, int receiver_id,
bool primaryInterface, bool verify);
explicit Receiver(int detector_id, int module_id, int interface_id,
int receiver_id, bool verify);
virtual ~Receiver();
@ -148,8 +147,9 @@ namespace sls {
void checkVersionCompatibility();
const int receiverId{0};
const int interfaceId{0};
const int moduleId{0};
mutable sls::SharedMemory<sharedReceiver> shm{0, 0, 0, true};
mutable sls::SharedMemory<sharedReceiver> shm{0, 0, 0, 0};
};
} // sls

View File

@ -24,8 +24,7 @@
#define SHM_MULTI_PREFIX "/slsDetectorPackage_multi_"
#define SHM_MODULE_PREFIX "_module_"
#define SHM_RECEIVER_PREFIX "_receiver_"
#define SHM_RECEIVER2_PREFIX "_receiver2_"
#define SHM_RECEIVER_PREFIX "_receiver" //interface_id + '_'
#define SHM_ENV_NAME "SLSDETNAME"
#include <iostream>
@ -41,12 +40,12 @@ class SharedMemory {
* Constructor
* creates the single/multi detector shared memory name
* @param multiId multi detector id
* @param moduleId module detector id, -1 if a multi detector shared memory
* @param receiverId receiver id, -1 if a multi detector or module shared memory
* @param primaryInterface is false, for the second udp port receiver
* @param moduleId module detectr id, -1 if a multi detector shared memory
* @param interfaceId 0 for primary interface, 1 for secondary
* @param receiverId receiver id, -1 if not a rxr shm, else round robin entry
*/
SharedMemory(int multiId, int moduleId, int receiverId = -1, bool primaryInterface = true) {
name = ConstructSharedMemoryName(multiId, moduleId, receiverId, primaryInterface);
SharedMemory(int multiId, int moduleId, int interfaceId = 0, int receiverId = -1) {
name = ConstructSharedMemoryName(multiId, moduleId, interfaceId, receiverId);
}
/**
@ -221,12 +220,12 @@ class SharedMemory {
* throws exception if name created is longer than required 255(manpages)
* @param multiId multi detector id
* @param moduleId module detector id, -1 if a multi detector shared memory
* @param receiverId receiver id, -1 if a multi detector or module shared memory
* @param primaryInterface false, if second udp port receiver
* @param interfaceId 0 for primary interface, 1 for secondary
* @param receiverId receiver id, -1 if not a rxr shm, else round robin entry
* @returns shared memory name
*/
std::string ConstructSharedMemoryName(int multiId, int moduleId,
int receiverId, bool primaryInterface) {
int interfaceId = 0, int receiverId = -1) {
// using environment path
std::string sEnvPath = "";
@ -242,15 +241,10 @@ class SharedMemory {
else if (receiverId < 0)
ss << SHM_MULTI_PREFIX << multiId <<
SHM_MODULE_PREFIX << moduleId << sEnvPath;
else if (primaryInterface)
ss << SHM_MULTI_PREFIX << multiId <<
SHM_MODULE_PREFIX << moduleId <<
SHM_RECEIVER_PREFIX << receiverId << sEnvPath;
else
ss << SHM_MULTI_PREFIX << multiId <<
SHM_MODULE_PREFIX << moduleId <<
SHM_RECEIVER2_PREFIX << receiverId << sEnvPath;
SHM_RECEIVER_PREFIX << interfaceId << '_' << receiverId << sEnvPath;
std::string temp = ss.str();
if (temp.length() > NAME_MAX_LENGTH) {

View File

@ -334,7 +334,7 @@ int ClientInterface::setup_receiver(Interface &socket) {
<< "detectorSize.y:" << arg.detectorSize.y << std::endl
<< "moduleId:" << arg.moduleId << std::endl
<< "hostname:" << arg.hostname << std::endl
<< "primary Interace: " << arg.primaryInterface << std::endl
<< "interfaceId: " << arg.interfaceId << std::endl
<< "zmq ip:" << arg.zmq_ip << std::endl
<< "udpInterfaces:" << arg.udpInterfaces << std::endl
<< "udp_dstport:" << arg.udp_dstport << std::endl

View File

@ -470,7 +470,7 @@ class slsDetectorDefs {
xy detectorSize;
int moduleId{0};
char hostname[MAX_STR_LENGTH];
bool primaryInterface{true};
int interfaceId{0};
uint32_t zmq_ip{0U};
int udpInterfaces{1};
int udp_dstport{0};