FairMQ  1.4.33
C++ Message Queuing Library and Framework
FairMQSplitter.h
1 /********************************************************************************
2  * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
3  * *
4  * This software is distributed under the terms of the *
5  * GNU Lesser General Public Licence (LGPL) version 3, *
6  * copied verbatim in the file "LICENSE" *
7  ********************************************************************************/
15 #ifndef FAIRMQSPLITTER_H_
16 #define FAIRMQSPLITTER_H_
17 
18 #include "FairMQDevice.h"
19 
20 #include <string>
21 
23 {
24  public:
26  : fMultipart(true)
27  , fNumOutputs(0)
28  , fDirection(0)
29  , fInChannelName()
30  , fOutChannelName()
31  {}
32  ~FairMQSplitter() {}
33 
34  protected:
35  bool fMultipart;
36  int fNumOutputs;
37  int fDirection;
38  std::string fInChannelName;
39  std::string fOutChannelName;
40 
41  void InitTask() override
42  {
43  fMultipart = fConfig->GetProperty<bool>("multipart");
44  fInChannelName = fConfig->GetProperty<std::string>("in-channel");
45  fOutChannelName = fConfig->GetProperty<std::string>("out-channel");
46  fNumOutputs = fChannels.at(fOutChannelName).size();
47  fDirection = 0;
48 
49  if (fMultipart) {
50  OnData(fInChannelName, &FairMQSplitter::HandleData<FairMQParts>);
51  } else {
52  OnData(fInChannelName, &FairMQSplitter::HandleData<FairMQMessagePtr>);
53  }
54  }
55 
56  template<typename T>
57  bool HandleData(T& payload, int)
58  {
59  Send(payload, fOutChannelName, fDirection);
60 
61  if (++fDirection >= fNumOutputs) {
62  fDirection = 0;
63  }
64 
65  return true;
66  }
67 };
68 
69 #endif /* FAIRMQSPLITTER_H_ */
FairMQDevice::fChannels
std::unordered_map< std::string, std::vector< FairMQChannel > > fChannels
Device channels.
Definition: FairMQDevice.h:383
fair::mq::ProgOptions::GetProperty
T GetProperty(const std::string &key) const
Read config property, throw if no property with this key exists.
Definition: ProgOptions.h:69
FairMQSplitter
Definition: FairMQSplitter.h:23
FairMQSplitter::InitTask
void InitTask() override
Task initialization (can be overloaded in child classes)
Definition: FairMQSplitter.h:47
FairMQDevice::Send
int64_t Send(FairMQMessagePtr &msg, const std::string &channel, const int index=0, int sndTimeoutInMs=-1)
Definition: FairMQDevice.h:97
FairMQDevice::fConfig
fair::mq::ProgOptions * fConfig
Pointer to config (internal or external)
Definition: FairMQDevice.h:385
FairMQDevice
Definition: FairMQDevice.h:50

privacy