mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-22 03:40:04 +02:00
restream stop from receiver
This commit is contained in:
parent
b75985088d
commit
70bf6eb4cb
@ -116,6 +116,12 @@ class DataStreamer : private virtual slsReceiverDefs, public ThreadObject {
|
||||
*/
|
||||
void CloseZmqSocket();
|
||||
|
||||
/**
|
||||
* Restream stop dummy packet
|
||||
* @return OK or FAIL
|
||||
*/
|
||||
int restreamStop();
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
|
@ -541,6 +541,12 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter
|
||||
*/
|
||||
void setStreamingPort(const uint32_t i);
|
||||
|
||||
/**
|
||||
* Restream stop dummy packet from receiver
|
||||
* @return OK or FAIL
|
||||
*/
|
||||
int restreamStop();
|
||||
|
||||
//***callback functions***
|
||||
/**
|
||||
* Call back for start acquisition
|
||||
|
@ -624,6 +624,12 @@ class UDPInterface {
|
||||
*/
|
||||
virtual void setStreamingPort(const uint32_t i) = 0;
|
||||
|
||||
/**
|
||||
* Restream stop dummy packet from receiver
|
||||
* @return OK or FAIL
|
||||
*/
|
||||
virtual int restreamStop() = 0;
|
||||
|
||||
|
||||
//***callback functions***
|
||||
/**
|
||||
|
@ -170,6 +170,12 @@ class UDPStandardImplementation: private virtual slsReceiverDefs, public UDPBase
|
||||
*/
|
||||
void closeFiles();
|
||||
|
||||
/**
|
||||
* Restream stop dummy packet from receiver
|
||||
* @return OK or FAIL
|
||||
*/
|
||||
int restreamStop();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
@ -267,6 +267,9 @@ class slsReceiverTCPIPInterface : private virtual slsReceiverDefs {
|
||||
/** set silent mode */
|
||||
int set_silent_mode();
|
||||
|
||||
/** restream stop packet */
|
||||
int restream_stop();
|
||||
|
||||
|
||||
|
||||
/** detector type */
|
||||
|
@ -63,6 +63,7 @@ enum recFuncs{
|
||||
F_SET_RECEIVER_STREAMING_PORT, /** < sets the receiver streaming port */
|
||||
|
||||
F_SET_RECEIVER_SILENT_MODE, /** < sets the receiver silent mode */
|
||||
F_RESTREAM_STOP_FROM_RECEIVER, /** < restream stop from receiver */
|
||||
/* Always append functions hereafter!!! */
|
||||
|
||||
|
||||
|
@ -280,3 +280,15 @@ int DataStreamer::SendHeader(sls_detector_header* header, bool dummy) {
|
||||
header->detType, header->version
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
int DataStreamer::restreamStop() {
|
||||
//send dummy header
|
||||
int ret = zmqSocket->SendHeaderData(index, true, SLS_DETECTOR_JSON_HEADER_VERSION);
|
||||
if (!ret) {
|
||||
FILE_LOG(logERROR) << "Could not Restream Dummy Header via ZMQ for port " << zmqSocket->GetPortNumber();
|
||||
return FAIL;
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
@ -569,6 +569,11 @@ void UDPBaseImplementation::setStreamingPort(const uint32_t i) {
|
||||
}
|
||||
|
||||
|
||||
int UDPBaseImplementation::restreamStop() {
|
||||
FILE_LOG(logWARNING) << __AT__ << " doing nothing...";
|
||||
FILE_LOG(logERROR) << __AT__ << " must be overridden by child classes";
|
||||
}
|
||||
|
||||
/***callback functions***/
|
||||
void UDPBaseImplementation::registerCallBackStartAcquisition(int (*func)(char*, char*, uint64_t, uint32_t, void*),void *arg){
|
||||
startAcquisitionCallBack=func;
|
||||
|
@ -571,6 +571,21 @@ void UDPStandardImplementation::closeFiles() {
|
||||
}
|
||||
|
||||
|
||||
int UDPStandardImplementation::restreamStop() {
|
||||
bool ret = OK;
|
||||
for (vector<DataStreamer*>::const_iterator it = dataStreamer.begin(); it != dataStreamer.end(); ++it) {
|
||||
if ((*it)->restreamStop() == FAIL)
|
||||
ret = FAIL;
|
||||
}
|
||||
|
||||
// if fail, prints in datastreamer
|
||||
if (ret == OK) {
|
||||
FILE_LOG(logINFO) << "Restreaming Dummy Header via ZMQ successful";
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void UDPStandardImplementation::SetLocalNetworkParameters() {
|
||||
//to increase socket receiver buffer size and max length of input queue by changing kernel settings
|
||||
|
@ -283,6 +283,7 @@ const char* slsReceiverTCPIPInterface::getFunctionName(enum recFuncs func) {
|
||||
case F_SEND_RECEIVER_MULTIDETSIZE: return "F_SEND_RECEIVER_MULTIDETSIZE";
|
||||
case F_SET_RECEIVER_STREAMING_PORT: return "F_SET_RECEIVER_STREAMING_PORT";
|
||||
case F_SET_RECEIVER_SILENT_MODE: return "F_SET_RECEIVER_SILENT_MODE";
|
||||
case F_RESTREAM_STOP_FROM_RECEIVER: return "F_RESTREAM_STOP_FROM_RECEIVER";
|
||||
default: return "Unknown Function";
|
||||
}
|
||||
}
|
||||
@ -330,6 +331,7 @@ int slsReceiverTCPIPInterface::function_table(){
|
||||
flist[F_SEND_RECEIVER_MULTIDETSIZE] = &slsReceiverTCPIPInterface::set_multi_detector_size;
|
||||
flist[F_SET_RECEIVER_STREAMING_PORT] = &slsReceiverTCPIPInterface::set_streaming_port;
|
||||
flist[F_SET_RECEIVER_SILENT_MODE] = &slsReceiverTCPIPInterface::set_silent_mode;
|
||||
flist[F_RESTREAM_STOP_FROM_RECEIVER] = &slsReceiverTCPIPInterface::restream_stop;
|
||||
#ifdef VERYVERBOSE
|
||||
for (int i = 0; i < NUM_REC_FUNCTIONS ; i++) {
|
||||
FILE_LOG(logINFO) << "function fnum: " << i << " (" << getFunctionName((enum recFuncs)i) << ") located at " << (unsigned int)flist[i];
|
||||
@ -2425,3 +2427,46 @@ int slsReceiverTCPIPInterface::set_silent_mode() {
|
||||
// return ok/fail
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int slsReceiverTCPIPInterface::restream_stop(){
|
||||
ret = OK;
|
||||
memset(mess, 0, sizeof(mess));
|
||||
|
||||
// execute action
|
||||
// only a set, not a get
|
||||
#ifdef SLS_RECEIVER_UDP_FUNCTIONS
|
||||
if (receiverBase == NULL)
|
||||
invalidReceiverObject();
|
||||
else if (mySock->differentClients && lockStatus)
|
||||
receiverlocked();
|
||||
else if (receiverBase->getStatus() != IDLE)
|
||||
receiverNotIdle();
|
||||
else if (receiverBase->getDataStreamEnable() == false) {
|
||||
ret = FAIL;
|
||||
sprintf(mess,"Could not restream stop packet as data Streaming is disabled.\n");
|
||||
FILE_LOG(logERROR) << "Warning: " << mess;
|
||||
} else {
|
||||
ret = receiverBase->restreamStop();
|
||||
if (ret == FAIL) {
|
||||
sprintf(mess,"Could not restream stop packet.\n");
|
||||
FILE_LOG(logERROR) << "Warning: " << mess;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (ret == OK && mySock->differentClients)
|
||||
ret = FORCE_UPDATE;
|
||||
|
||||
// send answer
|
||||
mySock->SendDataOnly(&ret,sizeof(ret));
|
||||
if (ret == FAIL)
|
||||
mySock->SendDataOnly(mess,sizeof(mess));
|
||||
|
||||
// return ok/fail
|
||||
return ret;
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user