mirror of
https://github.com/FairRootGroup/FairMQ.git
synced 2025-10-13 16:46:47 +00:00
- FairMQ: add possibility to poll on multiple channels. - FairMQ: include command channel when polling on blocking calls (for unblocking without termination). - FairMQ: move signal handler inside of FairMQDevice class (call FairMQDevice::CatchSignals() in the main function). - FairMQ: add 'bool CheckCurrentState(statename)' (instead of 'GetCurrentState() == statename' that cannot be thread safe). - FairMQDevice: add 'InteractiveStateLoop()' method that can be used to change states from the command line. - FairMQDevice: add automatic transition to IDLE state if Run() exits without an external event. - FairMQDevice: implement device reset. - FairMQDevice: use unordered_map for device channels. - FairMQChannel: improve address validation for channels. - FairMQChannel: add ExpectsAnotherPart() method to check if another msg part is expected (old approach still works). - FairMQ: remove invalid transition from the run files. - FairMQFileSink: disable ROOT termination signal handler. - Tutorial3: spawn xterm windows from start scripts without overlapping for better visibility. - FairMQ Examples: update protobuf test and move its files to a common directory. - FairMQStateMachine: improve feedback on invalid transitions (more readable).
60 lines
1.5 KiB
Smarty
60 lines
1.5 KiB
Smarty
/*
|
|
* File: GenericFileSink.tpl
|
|
* Author: winckler
|
|
*
|
|
* Created on October 7, 2014, 7:21 PM
|
|
*/
|
|
|
|
template <typename InputPolicy, typename OutputPolicy>
|
|
GenericFileSink<InputPolicy, OutputPolicy>::GenericFileSink()
|
|
: InputPolicy()
|
|
, OutputPolicy()
|
|
{
|
|
}
|
|
|
|
template <typename InputPolicy, typename OutputPolicy>
|
|
GenericFileSink<InputPolicy, OutputPolicy>::~GenericFileSink()
|
|
{
|
|
}
|
|
|
|
template <typename InputPolicy, typename OutputPolicy>
|
|
void GenericFileSink<InputPolicy, OutputPolicy>::SetTransport(FairMQTransportFactory* transport)
|
|
{
|
|
FairMQDevice::SetTransport(transport);
|
|
// InputPolicy::SetTransport(transport);
|
|
}
|
|
|
|
|
|
template <typename InputPolicy, typename OutputPolicy>
|
|
void GenericFileSink<InputPolicy, OutputPolicy>::InitTask()
|
|
{
|
|
InitOutputFile();
|
|
// InputPolicy::Init();
|
|
// OutputPolicy::Init();
|
|
}
|
|
|
|
template <typename InputPolicy, typename OutputPolicy>
|
|
void GenericFileSink<InputPolicy, OutputPolicy>::InitOutputFile()
|
|
{
|
|
OutputPolicy::InitOutFile();
|
|
}
|
|
|
|
template <typename InputPolicy, typename OutputPolicy>
|
|
void GenericFileSink<InputPolicy, OutputPolicy>::Run()
|
|
{
|
|
int receivedMsg = 0;
|
|
|
|
while (CheckCurrentState(RUNNING))
|
|
{
|
|
FairMQMessage* msg = fTransportFactory->CreateMessage();
|
|
if (fChannels.at("data-in").at(0).Receive(msg) > 0)
|
|
{
|
|
OutputPolicy::AddToFile(InputPolicy::DeSerializeMsg(msg));
|
|
receivedMsg++;
|
|
}
|
|
delete msg;
|
|
}
|
|
|
|
MQLOG(INFO) << "Received " << receivedMsg << " messages!";
|
|
}
|