otsdaq  v2_01_00
DataManager.h
1 #ifndef _ots_DataManager_h_
2 #define _ots_DataManager_h_
3 
4 #include "otsdaq-core/MessageFacility/MessageFacility.h"
5 #include "otsdaq-core/Macros/CoutMacros.h"
6 #include "otsdaq-core/FiniteStateMachine/VStateMachine.h"
7 #include "otsdaq-core/DataManager/CircularBuffer.h"
8 #include "otsdaq-core/Configurable/Configurable.h"
9 
10 #include <map>
11 #include <string>
12 #include <vector>
13 #include <memory>
14 
15 namespace ots
16 {
17 class DataProcessor;
18 class DataProducer;
19 class DataConsumer;
20 class CircularBufferBase;
21 
22 //DataManager
23 // This class is the base class that handles a collection of Buffers and associated Data Processor plugins.
24 class DataManager: public VStateMachine, public Configurable
25 {
26 public:
27  DataManager(const ConfigurationTree& theXDAQContextConfigTree, const std::string& supervisorConfigurationPath);
28  virtual ~DataManager(void);
29 
30  //State Machine Methods
31  virtual void configure(void);
32  virtual void halt (void);
33  virtual void pause (void);
34  virtual void resume (void);
35  virtual void start (std::string runNumber);
36  virtual void stop (void);
37 
38 
39 
40  template<class D, class H>
41  void configureBuffer(std::string bufferUID)
42  {
43  buffers_[bufferUID].buffer_ = new CircularBuffer<D,H>();
44  buffers_[bufferUID].status_ = Initialized;
45  }
46  void registerProducer(std::string bufferUID, DataProducer* producer);//The data manager becomes the owner of the producer object!
47  void registerConsumer(std::string bufferUID, DataConsumer* consumer, bool registerToBuffer=true);//The data manager becomes the owner of the consumer object!
48 
49 protected:
50  void eraseAllBuffers (void);
51  void eraseBuffer (std::string bufferUID);
52 
53  void startAllBuffers (std::string runNumber);
54  void stopAllBuffers (void);
55  void resumeAllBuffers(void);
56  void pauseAllBuffers (void);
57 
58  void startBuffer (std::string bufferUID, std::string runNumber);
59  void stopBuffer (std::string bufferUID);
60  void resumeBuffer (std::string bufferUID);
61  void pauseBuffer (std::string bufferUID);
62 
63 // void startProducer (std::string bufferUID, std::string producerID);
64 // void stopProducer (std::string bufferUID, std::string producerID);
65 // void startConsumer (std::string bufferUID, std::string consumerID);
66 // void stopConsumer (std::string bufferUID, std::string consumerID);
67 
68 //#include "otsdaq-core/DataTypes/DataStructs.h"
69 // void setConsumerParameters(std::string name);
70 
71  enum BufferStatus {Initialized, Running};
72 
73  bool unregisterConsumer(std::string consumerID);
74  bool deleteBuffer (std::string bufferUID);
75  struct Buffer
76  {
77  CircularBufferBase* buffer_;
78  std::vector<std::shared_ptr<DataProducer>> producers_;
79  //std::vector<DataProducer*> producers_;
80  std::vector<std::shared_ptr<DataConsumer>> consumers_;
81  BufferStatus status_;
82  };
83  std::map<std::string, Buffer> buffers_;
84 };
85 
86 }
87 
88 #endif
void eraseBuffer(std::string bufferUID)
!!!!Delete all Buffers and all the pointers of the producers and consumers
Definition: DataManager.cc:258
void startAllBuffers(std::string runNumber)
!!!!Delete all the pointers of the producers and consumers
Definition: DataManager.cc:334