Belle II Software  release-05-01-25
NSMCallback.h
1 #ifndef _Belle2_NSMCallback_hh
2 #define _Belle2_NSMCallback_hh
3 
4 #include "daq/slc/nsm/AbstractNSMCallback.h"
5 #include "daq/slc/nsm/NSMCommand.h"
6 #include "daq/slc/nsm/NSMData.h"
7 
8 #include <string>
9 #include <vector>
10 #include <map>
11 
12 namespace Belle2 {
18  class NSMCommunicator;
19  class NSMMessage;
20 
21  typedef std::map<std::string, NSMNode> NSMNodeMap;
22  typedef std::map<std::string, NSMData> NSMDataMap;
23 
25 
26  friend class NSMCommunicator;
27  friend class NSMNodeDaemon;
28 
29  public:
30  NSMCallback(int timeout = 5);
31  virtual ~NSMCallback() {}
32 
33  public:
34  virtual void init(NSMCommunicator&) {}
35  virtual void term() {}
36  virtual void timeout(NSMCommunicator&) {}
37  virtual bool perform(NSMCommunicator& com);
38  virtual void ok(const char* /*node*/, const char* /*data*/) {}
39  virtual void fatal(const char* /*node*/, const char* /*data*/) {}
40  virtual void error(const char* /*node*/, const char* /*data*/) {}
41  virtual void logset(const DAQLogMessage&) {}
42  virtual void vget(const std::string& nodename,
43  const std::string& vname);
44  virtual void vset(NSMCommunicator& com, const NSMVar& var);
45  virtual void vlistget(NSMCommunicator& com);
46  virtual void vlistset(NSMCommunicator& com);
47  virtual void vreply(NSMCommunicator&, const std::string&, bool) {}
48 
49  public:
50  void reply(const NSMMessage& msg);
51  void log(LogFile::Priority pri, const char* format, ...);
52  void log(LogFile::Priority pri, const std::string& msg);
53  int reset();
54 
55  public:
56  NSMDataMap& getDataMap() { return m_datas; }
57  NSMData& getData(const std::string& name);
58  NSMData& getData() { return m_data; }
59  void openData(const std::string& name, const std::string& format,
60  int revision = -1);
61  void allocData(const std::string& name, const std::string& format,
62  int revision);
63  const std::string& getCategory() const { return m_category; }
64  void setCategory(const std::string& category) { m_category = category; }
65 
66  protected:
67  virtual void notify(const NSMVar& var);
68  void reg(const NSMCommand& cmd) { m_cmd_v.push_back(cmd); }
69  void addNode(const NSMNode& node);
70  const NSMNodeMap& getNodes() { return m_nodes; }
71  void setLogNode(const NSMNode& node) { m_lognode = node; }
72  const NSMNode& getLogNode() { return m_lognode; }
73 
74  private:
75  typedef std::vector<NSMCommand> NSMCommandList;
76 
77  private:
78  int addDefaultHandlers();
79 
80  NSMCommandList& getCommandList() { return m_cmd_v; }
81  void alloc_open(NSMCommunicator& com);
82 
83  private:
84  NSMCommandList m_cmd_v;
85  NSMNodeMap m_nodes;
86  NSMData m_data;
87  NSMDataMap m_datas;
88  NSMNode m_lognode;
89  std::string m_category;
90 
91  };
92 
93  inline NSMData& NSMCallback::getData(const std::string& name)
94  {
95  if (m_datas.find(name) != m_datas.end()) {
96  return m_datas[name];
97  }
98  throw (std::out_of_range("nodata registered : " + name));
99  }
100 
101  inline void NSMCallback::openData(const std::string& name,
102  const std::string& format,
103  int revision)
104  {
105  if (m_datas.find(name) == m_datas.end()) {
106  m_datas.insert(NSMDataMap::value_type(name, NSMData(name, format, revision)));
107  }
108  }
109 
110  inline void NSMCallback::allocData(const std::string& name,
111  const std::string& format,
112  int revision)
113  {
114  m_data = NSMData(name, format, revision);
115  }
116 
118 };
119 
120 #endif
Belle2::DAQLogMessage
Definition: DAQLogMessage.h:16
Belle2::NSMNode
Definition: NSMNode.h:14
Belle2::NSMNodeDaemon
Definition: NSMNodeDaemon.h:12
Belle2::NSMData
Definition: NSMData.h:24
Belle2::AbstractNSMCallback
Definition: AbstractNSMCallback.h:22
Belle2::NSMCommunicator
Definition: NSMCommunicator.h:25
Belle2::NSMMessage
Definition: NSMMessage.h:29
Belle2::NSMCallback
Definition: NSMCallback.h:24
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::NSMCommand
Definition: NSMCommand.h:12
Belle2::NSMVar
Definition: NSMVar.h:16