otsdaq  3.03.00
DataManager.h
1 #ifndef _ots_DataManager_h_
2 #define _ots_DataManager_h_
3 
4 #include "otsdaq/Configurable/Configurable.h"
5 #include "otsdaq/DataManager/CircularBuffer.h"
6 #include "otsdaq/FiniteStateMachine/VStateMachine.h"
7 #include "otsdaq/Macros/CoutMacros.h"
8 #include "otsdaq/MessageFacility/MessageFacility.h"
9 
10 #include <map>
11 #include <memory>
12 #include <string>
13 #include <vector>
14 
15 namespace ots
16 {
17 class DataProcessor;
18 class DataProducerBase;
19 class DataConsumer;
20 class CircularBufferBase;
21 
25 class DataManager : public Configurable, public VStateMachine
26 {
27  public:
28  DataManager(const ConfigurationTree& theXDAQContextConfigTree,
29  const std::string& supervisorConfigurationPath);
30  virtual ~DataManager(void);
31 
33  virtual void configure(void);
34  virtual void halt(void);
35  virtual void pause(void);
36  virtual void resume(void);
37  virtual void start(std::string runNumber);
38  virtual void stop(void);
39 
40  template<class D, class H>
41  void configureBuffer(const std::string& bufferUID)
42  {
43  buffers_[bufferUID].buffer_ = new CircularBuffer<D, H>(bufferUID);
44  buffers_[bufferUID].status_ = Initialized;
45  }
46 
47  void registerProducer(
48  const std::string& bufferUID,
50  producer);
51  void registerConsumer(
52  const std::string& bufferUID,
54  consumer);
55 
56  void unregisterFEProducer(const std::string& bufferID,
57  const std::string& feProducerID);
58 
63  void dumpStatus(std::ostream* out = (std::ostream*)&(std::cout)) const;
64 
65  protected:
66  void destroyBuffers(
67  void);
68  // void destroyBuffer (const std::string& bufferUID);//!!!!!Delete all the pointers of the producers and consumers
70  void configureAllBuffers(void);
71  void startAllBuffers(const std::string& runNumber);
72  void stopAllBuffers(void);
73  void resumeAllBuffers(void);
74  void pauseAllBuffers(void);
75 
76  void configureBuffer(const std::string& bufferUID);
77  void startBuffer(const std::string& bufferUID, std::string runNumber);
78  void stopBuffer(const std::string& bufferUID);
79  void resumeBuffer(const std::string& bufferUID);
80  void pauseBuffer(const std::string& bufferUID);
81 
82  enum BufferStatus
83  {
84  Initialized,
85  Running
86  };
87 
88  struct Buffer
89  {
90  CircularBufferBase* buffer_;
91  std::vector<DataProducerBase*> producers_;
92  std::vector<DataConsumer*> consumers_;
93  BufferStatus status_;
94  };
95  std::map<std::string /*dataBufferId*/,
96  Buffer /*CircularBuffer:=Map of Producer to Buffer Implementations*/>
97  buffers_;
98 
99  public:
103 
104  const std::map<std::string /*dataBufferId*/, Buffer>& getBuffers(void) const
105  {
106  return buffers_;
107  }
108 };
109 
110 } // namespace ots
111 
112 #endif
void unregisterFEProducer(const std::string &bufferID, const std::string &feProducerID)
Definition: DataManager.cc:641
void registerProducer(const std::string &bufferUID, DataProducerBase *producer)
The data manager becomes the owner of the producer object!
Definition: DataManager.cc:689
bool parentSupervisorHasFrontends_
Definition: DataManager.h:100
void dumpStatus(std::ostream *out=(std::ostream *)&(std::cout)) const
Definition: DataManager.cc:36
void registerConsumer(const std::string &bufferUID, DataConsumer *consumer)
The data manager becomes the owner of the consumer object!
Definition: DataManager.cc:728
void destroyBuffers(void)
!!!!!Delete all Buffers and all the pointers of the producers and consumers
Definition: DataManager.cc:465
virtual void configure(void)
State Machine Methods.
Definition: DataManager.cc:65