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 */
|
||||
Result<bool> getUseReceiverFlag(Positions pos = {}) const;
|
||||
|
||||
|
@ -955,6 +955,7 @@ std::string CmdProxy::ReceiverHostname(int action) {
|
||||
os << "[hostname or ip address]\n\t"
|
||||
"[hostname or ip address]:[tcp port]\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 "
|
||||
"to configure receiver. Also updates receiver with detector parameters.\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"
|
||||
"[Eiger][Jungfrau] Receiver hostname or IP for the second udp port. "
|
||||
"Port is the receiver tcp port (optional).\n\t"
|
||||
"Use 'none' to remove receivers\n\t"
|
||||
"Refer rx_hostname help for details"
|
||||
<< '\n';
|
||||
}
|
||||
@ -984,6 +986,13 @@ std::string CmdProxy::ReceiverHostname(int action) {
|
||||
throw sls::RuntimeError("Cannot concatenate receiver hostnames");
|
||||
}
|
||||
std::pair<std::string, int> res = parseHostnameAndPort(args[0]);
|
||||
// removing receivers
|
||||
if (res.first == "none") {
|
||||
det->removeReceivers(udpInterface);
|
||||
os << "removed" << '\n';
|
||||
}
|
||||
// adding receivers
|
||||
else {
|
||||
std::string hostname = res.first;
|
||||
int port = res.second;
|
||||
if (port == 0) {
|
||||
@ -997,6 +1006,7 @@ std::string CmdProxy::ReceiverHostname(int action) {
|
||||
}
|
||||
auto t = det->getRxHostname(udpInterface, {det_id});
|
||||
os << OutString(t) << '\n';
|
||||
}
|
||||
} else {
|
||||
throw sls::RuntimeError("Unknown action");
|
||||
}
|
||||
|
@ -691,6 +691,11 @@ void Detector::setTransmissionDelayRight(int value, Positions pos) {
|
||||
|
||||
// Receiver
|
||||
|
||||
void Detector::removeReceivers(const int udpInterface) {
|
||||
pimpl->removeReceivers(udpInterface);
|
||||
}
|
||||
|
||||
|
||||
Result<bool> Detector::getUseReceiverFlag(Positions pos) const {
|
||||
return pimpl->Parallel(&Module::getUseReceiverFlag, pos);
|
||||
}
|
||||
@ -702,48 +707,33 @@ Result<std::string> Detector::getRxHostname(const int udpInterface, Positions po
|
||||
case 2:
|
||||
return pimpl->Parallel2(&Receiver::getHostname, pos, {0});
|
||||
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) {
|
||||
switch (udpInterface) {
|
||||
case 1:
|
||||
if (!pimpl->isReceiverInitialized()) {
|
||||
pimpl->initReceiver();
|
||||
if (!pimpl->isReceiverInitialized(udpInterface)) {
|
||||
pimpl->initReceiver(udpInterface);
|
||||
}
|
||||
if (udpInterface == 1) {
|
||||
pimpl->Parallel1(&Receiver::setHostname, pos, {0}, hostname);
|
||||
break;
|
||||
case 2:
|
||||
if (!pimpl->isReceiver2Initialized()) {
|
||||
pimpl->initReceiver2();
|
||||
}
|
||||
} else {
|
||||
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,
|
||||
int module_id) {
|
||||
switch (udpInterface) {
|
||||
case 1:
|
||||
if (!pimpl->isReceiverInitialized()) {
|
||||
pimpl->initReceiver();
|
||||
if (!pimpl->isReceiverInitialized(udpInterface)) {
|
||||
pimpl->initReceiver(udpInterface);
|
||||
}
|
||||
if (udpInterface == 1) {
|
||||
pimpl->Parallel1(&Receiver::setTCPPort, {module_id}, {0}, port);
|
||||
pimpl->Parallel1(&Receiver::setHostname, {module_id}, {0}, hostname);
|
||||
break;
|
||||
case 2:
|
||||
if (!pimpl->isReceiver2Initialized()) {
|
||||
pimpl->initReceiver2();
|
||||
}
|
||||
} else {
|
||||
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:
|
||||
return pimpl->Parallel2(&Receiver::getTCPPort, pos, {0});
|
||||
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) {
|
||||
if (udpInterface == 1) {
|
||||
if (!pimpl->isReceiverInitialized()) {
|
||||
pimpl->initReceiver();
|
||||
if (!pimpl->isReceiverInitialized(udpInterface)) {
|
||||
pimpl->initReceiver(udpInterface);
|
||||
}
|
||||
if (udpInterface == 1) {
|
||||
if (module_id == -1) {
|
||||
std::vector<int> port_list = getPortNumbers(port);
|
||||
for (int idet = 0; idet < size(); ++idet) {
|
||||
@ -772,10 +763,7 @@ void Detector::setRxPort(const int udpInterface, int port, int module_id) {
|
||||
} else {
|
||||
pimpl->Parallel1(&Receiver::setTCPPort, {module_id}, {0}, port);
|
||||
}
|
||||
} else if (udpInterface == 2) {
|
||||
if (!pimpl->isReceiver2Initialized()) {
|
||||
pimpl->initReceiver2();
|
||||
}
|
||||
} else {
|
||||
if (module_id == -1) {
|
||||
std::vector<int> port_list = getPortNumbers(port);
|
||||
for (int idet = 0; idet < size(); ++idet) {
|
||||
@ -785,8 +773,6 @@ void Detector::setRxPort(const int udpInterface, int port, int module_id) {
|
||||
} else {
|
||||
pimpl->Parallel2(&Receiver::setTCPPort, {module_id}, {0}, port);
|
||||
}
|
||||
} else {
|
||||
throw RuntimeError("Invalid udp interface number");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -361,7 +361,8 @@ void DetectorImpl::addModule(const std::string &hostname,
|
||||
detectors[pos]->updateNumberOfChannels();
|
||||
}
|
||||
|
||||
void DetectorImpl::initReceiver() {
|
||||
void DetectorImpl::initReceiver(const int udpInterface) {
|
||||
if (udpInterface == 1) {
|
||||
if (receivers.size() != 0) {
|
||||
throw RuntimeError("receiver vector already initialized");
|
||||
}
|
||||
@ -379,13 +380,7 @@ void DetectorImpl::initReceiver() {
|
||||
receivers.clear();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
bool DetectorImpl::isReceiverInitialized() {
|
||||
return (receivers.size() > 0);
|
||||
}
|
||||
|
||||
void DetectorImpl::initReceiver2() {
|
||||
} else if (udpInterface == 2) {
|
||||
if (receivers2.size() != 0) {
|
||||
throw RuntimeError("receiver2 vector already initialized");
|
||||
}
|
||||
@ -400,13 +395,46 @@ void DetectorImpl::initReceiver2() {
|
||||
detectors[iModule]->setNumberOfReceivers2(1);
|
||||
}
|
||||
} catch (...) {
|
||||
receivers.clear();
|
||||
receivers2.clear();
|
||||
throw;
|
||||
}
|
||||
} else {
|
||||
throw RuntimeError("Invalid udp interface number " +
|
||||
std::to_string(udpInterface));
|
||||
}
|
||||
}
|
||||
|
||||
bool DetectorImpl::isReceiver2Initialized() {
|
||||
bool DetectorImpl::isReceiverInitialized(const int udpInterface) {
|
||||
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() {
|
||||
|
@ -528,10 +528,9 @@ class DetectorImpl : public virtual slsDetectorDefs {
|
||||
void setHostname(const std::vector<std::string> &name,
|
||||
const std::vector<int> &port);
|
||||
|
||||
void initReceiver();
|
||||
bool isReceiverInitialized();
|
||||
void initReceiver2();
|
||||
bool isReceiver2Initialized();
|
||||
void initReceiver(const int udpInterface);
|
||||
bool isReceiverInitialized(const int udpInterface);
|
||||
void removeReceivers(const int udpInterface);
|
||||
|
||||
/** Gets the total number of detectors */
|
||||
int size() const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user