otsdaq  v2_00_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/CoutHeaderMacros.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 class DataManager: public VStateMachine, public Configurable
23 {
24 public:
25  DataManager(const ConfigurationTree& theXDAQContextConfigTree, const std::string& supervisorConfigurationPath);
26  virtual ~DataManager(void);
27 
28  //State Machine Methods
29  virtual void configure(void);
30  virtual void halt (void);
31  virtual void pause (void);
32  virtual void resume (void);
33  virtual void start (std::string runNumber);
34  virtual void stop (void);
35 
36 
37 
38  template<class D, class H>
39  void configureBuffer(std::string bufferUID)
40  {
41  buffers_[bufferUID].buffer_ = new CircularBuffer<D,H>();
42  buffers_[bufferUID].status_ = Initialized;
43  }
44  void registerProducer(std::string bufferUID, DataProducer* producer);//The data manager becomes the owner of the producer object!
45  void registerConsumer(std::string bufferUID, DataConsumer* consumer, bool registerToBuffer=true);//The data manager becomes the owner of the consumer object!
46 
47 protected:
48  void eraseAllBuffers (void);
49  void eraseBuffer (std::string bufferUID);
50 
51  void startAllBuffers (std::string runNumber);
52  void stopAllBuffers (void);
53  void resumeAllBuffers(void);
54  void pauseAllBuffers (void);
55 
56  void startBuffer (std::string bufferUID, std::string runNumber);
57  void stopBuffer (std::string bufferUID);
58  void resumeBuffer (std::string bufferUID);
59  void pauseBuffer (std::string bufferUID);
60 
61 // void startProducer (std::string bufferUID, std::string producerID);
62 // void stopProducer (std::string bufferUID, std::string producerID);
63 // void startConsumer (std::string bufferUID, std::string consumerID);
64 // void stopConsumer (std::string bufferUID, std::string consumerID);
65 
66 //#include "otsdaq-core/DataTypes/DataStructs.h"
67 // void setConsumerParameters(std::string name);
68 
69  enum BufferStatus {Initialized, Running};
70 
71  bool unregisterConsumer(std::string consumerID);
72  bool deleteBuffer (std::string bufferUID);
73  struct Buffer
74  {
75  CircularBufferBase* buffer_;
76  std::vector<std::shared_ptr<DataProducer>> producers_;
77  //std::vector<DataProducer*> producers_;
78  std::vector<std::shared_ptr<DataConsumer>> consumers_;
79  BufferStatus status_;
80  };
81  std::map<std::string, Buffer> buffers_;
82 };
83 
84 }
85 
86 #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