mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-29 09:30:02 +02:00
WIP: none to remove receivers
This commit is contained in:
parent
9a208caca8
commit
cfa9049ed3
@ -505,6 +505,10 @@ class Detector {
|
|||||||
* *
|
* *
|
||||||
* ************************************************/
|
* ************************************************/
|
||||||
|
|
||||||
|
/** interface is by 1 (primary udp interface),
|
||||||
|
* 2 for second udp interface [Eiger][Jungfrau] */
|
||||||
|
void removeReceivers(const int udpInterface);
|
||||||
|
|
||||||
/** true when slsReceiver is used */
|
/** true when slsReceiver is used */
|
||||||
Result<bool> getUseReceiverFlag(Positions pos = {}) const;
|
Result<bool> getUseReceiverFlag(Positions pos = {}) const;
|
||||||
|
|
||||||
|
@ -955,6 +955,7 @@ std::string CmdProxy::ReceiverHostname(int action) {
|
|||||||
os << "[hostname or ip address]\n\t"
|
os << "[hostname or ip address]\n\t"
|
||||||
"[hostname or ip address]:[tcp port]\n\t"
|
"[hostname or ip address]:[tcp port]\n\t"
|
||||||
"Receiver hostname or IP. Port is the receiver tcp port (optional).\n\t"
|
"Receiver hostname or IP. Port is the receiver tcp port (optional).\n\t"
|
||||||
|
"Use 'none' to remove receivers\n\t"
|
||||||
"Used for TCP control communication between client and receiver "
|
"Used for TCP control communication between client and receiver "
|
||||||
"to configure receiver. Also updates receiver with detector parameters.\n\t"
|
"to configure receiver. Also updates receiver with detector parameters.\n\t"
|
||||||
"TCP port must be unique, if included.\n\t"
|
"TCP port must be unique, if included.\n\t"
|
||||||
@ -967,6 +968,7 @@ std::string CmdProxy::ReceiverHostname(int action) {
|
|||||||
"[hostname or ip address]:[tcp port]\n\t"
|
"[hostname or ip address]:[tcp port]\n\t"
|
||||||
"[Eiger][Jungfrau] Receiver hostname or IP for the second udp port. "
|
"[Eiger][Jungfrau] Receiver hostname or IP for the second udp port. "
|
||||||
"Port is the receiver tcp port (optional).\n\t"
|
"Port is the receiver tcp port (optional).\n\t"
|
||||||
|
"Use 'none' to remove receivers\n\t"
|
||||||
"Refer rx_hostname help for details"
|
"Refer rx_hostname help for details"
|
||||||
<< '\n';
|
<< '\n';
|
||||||
}
|
}
|
||||||
@ -984,19 +986,27 @@ std::string CmdProxy::ReceiverHostname(int action) {
|
|||||||
throw sls::RuntimeError("Cannot concatenate receiver hostnames");
|
throw sls::RuntimeError("Cannot concatenate receiver hostnames");
|
||||||
}
|
}
|
||||||
std::pair<std::string, int> res = parseHostnameAndPort(args[0]);
|
std::pair<std::string, int> res = parseHostnameAndPort(args[0]);
|
||||||
std::string hostname = res.first;
|
// removing receivers
|
||||||
int port = res.second;
|
if (res.first == "none") {
|
||||||
if (port == 0) {
|
det->removeReceivers(udpInterface);
|
||||||
det->setRxHostname(udpInterface, hostname, {det_id});
|
os << "removed" << '\n';
|
||||||
} else {
|
}
|
||||||
if (det_id == -1 && det->size() > 1) {
|
// adding receivers
|
||||||
throw sls::RuntimeError("Cannot set same tcp port "
|
else {
|
||||||
"for all receiver hostnames");
|
std::string hostname = res.first;
|
||||||
}
|
int port = res.second;
|
||||||
det->setRxHostname(udpInterface, hostname, port, det_id);
|
if (port == 0) {
|
||||||
|
det->setRxHostname(udpInterface, hostname, {det_id});
|
||||||
|
} else {
|
||||||
|
if (det_id == -1 && det->size() > 1) {
|
||||||
|
throw sls::RuntimeError("Cannot set same tcp port "
|
||||||
|
"for all receiver hostnames");
|
||||||
|
}
|
||||||
|
det->setRxHostname(udpInterface, hostname, port, det_id);
|
||||||
|
}
|
||||||
|
auto t = det->getRxHostname(udpInterface, {det_id});
|
||||||
|
os << OutString(t) << '\n';
|
||||||
}
|
}
|
||||||
auto t = det->getRxHostname(udpInterface, {det_id});
|
|
||||||
os << OutString(t) << '\n';
|
|
||||||
} else {
|
} else {
|
||||||
throw sls::RuntimeError("Unknown action");
|
throw sls::RuntimeError("Unknown action");
|
||||||
}
|
}
|
||||||
|
@ -691,6 +691,11 @@ void Detector::setTransmissionDelayRight(int value, Positions pos) {
|
|||||||
|
|
||||||
// Receiver
|
// Receiver
|
||||||
|
|
||||||
|
void Detector::removeReceivers(const int udpInterface) {
|
||||||
|
pimpl->removeReceivers(udpInterface);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Result<bool> Detector::getUseReceiverFlag(Positions pos) const {
|
Result<bool> Detector::getUseReceiverFlag(Positions pos) const {
|
||||||
return pimpl->Parallel(&Module::getUseReceiverFlag, pos);
|
return pimpl->Parallel(&Module::getUseReceiverFlag, pos);
|
||||||
}
|
}
|
||||||
@ -702,48 +707,33 @@ Result<std::string> Detector::getRxHostname(const int udpInterface, Positions po
|
|||||||
case 2:
|
case 2:
|
||||||
return pimpl->Parallel2(&Receiver::getHostname, pos, {0});
|
return pimpl->Parallel2(&Receiver::getHostname, pos, {0});
|
||||||
default:
|
default:
|
||||||
throw RuntimeError("Invalid udp interface number");
|
throw RuntimeError("Invalid udp interface number " +
|
||||||
|
std::to_string(udpInterface));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Detector::setRxHostname(const int udpInterface, const std::string &hostname, Positions pos) {
|
void Detector::setRxHostname(const int udpInterface, const std::string &hostname, Positions pos) {
|
||||||
switch (udpInterface) {
|
if (!pimpl->isReceiverInitialized(udpInterface)) {
|
||||||
case 1:
|
pimpl->initReceiver(udpInterface);
|
||||||
if (!pimpl->isReceiverInitialized()) {
|
}
|
||||||
pimpl->initReceiver();
|
if (udpInterface == 1) {
|
||||||
}
|
pimpl->Parallel1(&Receiver::setHostname, pos, {0}, hostname);
|
||||||
pimpl->Parallel1(&Receiver::setHostname, pos, {0}, hostname);
|
} else {
|
||||||
break;
|
pimpl->Parallel2(&Receiver::setHostname, pos, {0}, hostname);
|
||||||
case 2:
|
|
||||||
if (!pimpl->isReceiver2Initialized()) {
|
|
||||||
pimpl->initReceiver2();
|
|
||||||
}
|
|
||||||
pimpl->Parallel2(&Receiver::setHostname, pos, {0}, hostname);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw RuntimeError("Invalid udp interface number");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Detector::setRxHostname(const int udpInterface, const std::string &hostname, const int port,
|
void Detector::setRxHostname(const int udpInterface, const std::string &hostname, const int port,
|
||||||
int module_id) {
|
int module_id) {
|
||||||
switch (udpInterface) {
|
if (!pimpl->isReceiverInitialized(udpInterface)) {
|
||||||
case 1:
|
pimpl->initReceiver(udpInterface);
|
||||||
if (!pimpl->isReceiverInitialized()) {
|
}
|
||||||
pimpl->initReceiver();
|
if (udpInterface == 1) {
|
||||||
}
|
pimpl->Parallel1(&Receiver::setTCPPort, {module_id}, {0}, port);
|
||||||
pimpl->Parallel1(&Receiver::setTCPPort, {module_id}, {0}, port);
|
pimpl->Parallel1(&Receiver::setHostname, {module_id}, {0}, hostname);
|
||||||
pimpl->Parallel1(&Receiver::setHostname, {module_id}, {0}, hostname);
|
} else {
|
||||||
break;
|
pimpl->Parallel2(&Receiver::setTCPPort, {module_id}, {0}, port);
|
||||||
case 2:
|
pimpl->Parallel2(&Receiver::setHostname, {module_id}, {0}, hostname);
|
||||||
if (!pimpl->isReceiver2Initialized()) {
|
|
||||||
pimpl->initReceiver2();
|
|
||||||
}
|
|
||||||
pimpl->Parallel2(&Receiver::setTCPPort, {module_id}, {0}, port);
|
|
||||||
pimpl->Parallel2(&Receiver::setHostname, {module_id}, {0}, hostname);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw RuntimeError("Invalid udp interface number");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -754,15 +744,16 @@ Result<int> Detector::getRxPort(const int udpInterface, Positions pos) const {
|
|||||||
case 2:
|
case 2:
|
||||||
return pimpl->Parallel2(&Receiver::getTCPPort, pos, {0});
|
return pimpl->Parallel2(&Receiver::getTCPPort, pos, {0});
|
||||||
default:
|
default:
|
||||||
throw RuntimeError("Invalid udp interface number");
|
throw RuntimeError("Invalid udp interface number " +
|
||||||
|
std::to_string(udpInterface));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Detector::setRxPort(const int udpInterface, int port, int module_id) {
|
void Detector::setRxPort(const int udpInterface, int port, int module_id) {
|
||||||
|
if (!pimpl->isReceiverInitialized(udpInterface)) {
|
||||||
|
pimpl->initReceiver(udpInterface);
|
||||||
|
}
|
||||||
if (udpInterface == 1) {
|
if (udpInterface == 1) {
|
||||||
if (!pimpl->isReceiverInitialized()) {
|
|
||||||
pimpl->initReceiver();
|
|
||||||
}
|
|
||||||
if (module_id == -1) {
|
if (module_id == -1) {
|
||||||
std::vector<int> port_list = getPortNumbers(port);
|
std::vector<int> port_list = getPortNumbers(port);
|
||||||
for (int idet = 0; idet < size(); ++idet) {
|
for (int idet = 0; idet < size(); ++idet) {
|
||||||
@ -772,10 +763,7 @@ void Detector::setRxPort(const int udpInterface, int port, int module_id) {
|
|||||||
} else {
|
} else {
|
||||||
pimpl->Parallel1(&Receiver::setTCPPort, {module_id}, {0}, port);
|
pimpl->Parallel1(&Receiver::setTCPPort, {module_id}, {0}, port);
|
||||||
}
|
}
|
||||||
} else if (udpInterface == 2) {
|
} else {
|
||||||
if (!pimpl->isReceiver2Initialized()) {
|
|
||||||
pimpl->initReceiver2();
|
|
||||||
}
|
|
||||||
if (module_id == -1) {
|
if (module_id == -1) {
|
||||||
std::vector<int> port_list = getPortNumbers(port);
|
std::vector<int> port_list = getPortNumbers(port);
|
||||||
for (int idet = 0; idet < size(); ++idet) {
|
for (int idet = 0; idet < size(); ++idet) {
|
||||||
@ -785,8 +773,6 @@ void Detector::setRxPort(const int udpInterface, int port, int module_id) {
|
|||||||
} else {
|
} else {
|
||||||
pimpl->Parallel2(&Receiver::setTCPPort, {module_id}, {0}, port);
|
pimpl->Parallel2(&Receiver::setTCPPort, {module_id}, {0}, port);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
throw RuntimeError("Invalid udp interface number");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,52 +361,80 @@ void DetectorImpl::addModule(const std::string &hostname,
|
|||||||
detectors[pos]->updateNumberOfChannels();
|
detectors[pos]->updateNumberOfChannels();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DetectorImpl::initReceiver() {
|
void DetectorImpl::initReceiver(const int udpInterface) {
|
||||||
if (receivers.size() != 0) {
|
if (udpInterface == 1) {
|
||||||
throw RuntimeError("receiver vector already initialized");
|
if (receivers.size() != 0) {
|
||||||
}
|
throw RuntimeError("receiver vector already initialized");
|
||||||
int tcpPort = DEFAULT_RX_PORTNO;
|
|
||||||
int zmqPort = DEFAULT_ZMQ_CL_PORTNO;
|
|
||||||
try {
|
|
||||||
for (int iModule = 0; iModule < size(); ++iModule) {
|
|
||||||
receivers.resize(detectors.size());
|
|
||||||
receivers[iModule].push_back(
|
|
||||||
sls::make_unique<Receiver>(detectorId, iModule, 0,
|
|
||||||
true, tcpPort++, "", zmqPort++));
|
|
||||||
detectors[iModule]->setNumberOfReceivers(1);
|
|
||||||
}
|
}
|
||||||
} catch (...) {
|
int tcpPort = DEFAULT_RX_PORTNO;
|
||||||
receivers.clear();
|
int zmqPort = DEFAULT_ZMQ_CL_PORTNO;
|
||||||
throw;
|
try {
|
||||||
}
|
for (int iModule = 0; iModule < size(); ++iModule) {
|
||||||
}
|
receivers.resize(detectors.size());
|
||||||
|
receivers[iModule].push_back(
|
||||||
bool DetectorImpl::isReceiverInitialized() {
|
sls::make_unique<Receiver>(detectorId, iModule, 0,
|
||||||
return (receivers.size() > 0);
|
true, tcpPort++, "", zmqPort++));
|
||||||
}
|
detectors[iModule]->setNumberOfReceivers(1);
|
||||||
|
}
|
||||||
void DetectorImpl::initReceiver2() {
|
} catch (...) {
|
||||||
if (receivers2.size() != 0) {
|
receivers.clear();
|
||||||
throw RuntimeError("receiver2 vector already initialized");
|
throw;
|
||||||
}
|
|
||||||
int tcpPort = DEFAULT_RX_PORTNO + size();
|
|
||||||
int zmqPort = DEFAULT_ZMQ_CL_PORTNO + size();
|
|
||||||
try {
|
|
||||||
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++));
|
|
||||||
detectors[iModule]->setNumberOfReceivers2(1);
|
|
||||||
}
|
}
|
||||||
} catch (...) {
|
} else if (udpInterface == 2) {
|
||||||
receivers.clear();
|
if (receivers2.size() != 0) {
|
||||||
throw;
|
throw RuntimeError("receiver2 vector already initialized");
|
||||||
|
}
|
||||||
|
int tcpPort = DEFAULT_RX_PORTNO + size();
|
||||||
|
int zmqPort = DEFAULT_ZMQ_CL_PORTNO + size();
|
||||||
|
try {
|
||||||
|
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++));
|
||||||
|
detectors[iModule]->setNumberOfReceivers2(1);
|
||||||
|
}
|
||||||
|
} catch (...) {
|
||||||
|
receivers2.clear();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw RuntimeError("Invalid udp interface number " +
|
||||||
|
std::to_string(udpInterface));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DetectorImpl::isReceiver2Initialized() {
|
bool DetectorImpl::isReceiverInitialized(const int udpInterface) {
|
||||||
return (receivers2.size() > 0);
|
switch (udpInterface) {
|
||||||
|
case 1:
|
||||||
|
return (receivers.size() > 0);
|
||||||
|
case 2:
|
||||||
|
return (receivers2.size() > 0);
|
||||||
|
default:
|
||||||
|
throw RuntimeError("Invalid udp interface number " +
|
||||||
|
std::to_string(udpInterface));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DetectorImpl::removeReceivers(const int udpInterface) {
|
||||||
|
if (udpInterface == 1) {
|
||||||
|
for (auto & dr: receivers) {
|
||||||
|
for (auto & r : dr) {
|
||||||
|
r->freeSharedMemory();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
receivers.clear();
|
||||||
|
} else if (udpInterface == 2) {
|
||||||
|
for (auto & dr: receivers2) {
|
||||||
|
for (auto & r : dr) {
|
||||||
|
r->freeSharedMemory();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
receivers2.clear();
|
||||||
|
} else {
|
||||||
|
throw RuntimeError("Invalid udp interface number " +
|
||||||
|
std::to_string(udpInterface));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DetectorImpl::updateDetectorSize() {
|
void DetectorImpl::updateDetectorSize() {
|
||||||
|
@ -528,10 +528,9 @@ class DetectorImpl : public virtual slsDetectorDefs {
|
|||||||
void setHostname(const std::vector<std::string> &name,
|
void setHostname(const std::vector<std::string> &name,
|
||||||
const std::vector<int> &port);
|
const std::vector<int> &port);
|
||||||
|
|
||||||
void initReceiver();
|
void initReceiver(const int udpInterface);
|
||||||
bool isReceiverInitialized();
|
bool isReceiverInitialized(const int udpInterface);
|
||||||
void initReceiver2();
|
void removeReceivers(const int udpInterface);
|
||||||
bool isReceiver2Initialized();
|
|
||||||
|
|
||||||
/** Gets the total number of detectors */
|
/** Gets the total number of detectors */
|
||||||
int size() const;
|
int size() const;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user