Jpp  15.0.5
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
monrouter.cpp
Go to the documentation of this file.
1 #include <iostream>
2 #include <string>
3 #include <cassert>
4 
5 #include "version.hpp"
6 
10 #include <JDAQ/JDAQTags.hh>
11 
12 #include <boost/asio.hpp>
13 #include <boost/scoped_ptr.hpp>
14 #include <boost/program_options.hpp>
15 /**
16  * \author cpellegrino
17  */
18 
19 namespace po = boost::program_options;
20 #include "configure.hpp"
21 
22 namespace KM3NETDAQ {
23 
25 {
26  // Objects
27  boost::scoped_ptr<JControlHost> m_ch;
28  boost::asio::io_service m_service;
29  mutable boost::asio::ip::udp::socket m_input;
30  bool m_running;
31  int m_port;
32 
33  public:
34 
36  std::string const& name
37  , std::string const& server
38  , JLogger* logger
39  , const int level
40  , int port
41  )
42  :
43  JDAQClient(name, server, logger, level)
45  , m_running(false)
46  , m_port(port)
47  {
49  }
50 
51  /**
52  * Interface methods for actions corresponding to state transitions.
53  */
54  virtual void actionEnter() {}
55  virtual void actionExit() {}
56 
57  virtual void actionInit(int length, const char* buffer) {}
58  virtual void actionReset(int length, const char* buffer) {}
59 
60  virtual void actionConfigure(int length, const char* buffer)
61  {
62  boost::property_tree::ptree const conf = detail::parse(
63  std::string(buffer, length)
64  );
65 
66  m_input.open(boost::asio::ip::udp::v4());
67 
68  m_input.bind(
69  boost::asio::ip::udp::endpoint(
70  boost::asio::ip::udp::v4()
71  , m_port
72  )
73  );
74 
75  m_ch.reset(
76  new JControlHost(
77  conf.get<std::string>("out_server_address")
78  , conf.get<unsigned>("out_server_port")
79  )
80  );
81  }
82 
83  virtual void actionQuit(int length, const char* buffer)
84  {
85  m_input.close();
86  m_ch.reset();
87  }
88 
89  virtual void actionStart(int length, const char* buffer)
90  {
91  int const run_number = getRunNumber();
92 
93  int const detector_id = getDetectorID();
94 
95  assert(run_number >= 0);
96 
97  m_running = true;
98  }
99 
100  virtual void actionStop(int length, const char* buffer)
101  {
102  m_input.close();
103  m_ch.reset();
104  }
105 
106  virtual void actionPause (int length, const char* buffer)
107  {
108  m_running = false;
109  }
110 
111  virtual void actionContinue (int length, const char* buffer)
112  {
113  m_running = true;
114  }
115 
116  virtual void actionRunning () {}
117 
118  virtual void setSelect(JFileDescriptorMask& mask) const
119  {
120  mask.set(m_input.native_handle());
121  }
122 
123  virtual void actionSelect(const JFileDescriptorMask& mask)
124  {
125  if (m_input.is_open()) {
126  if (mask.has(m_input.native_handle())) {
127  static size_t const max_size = 10000;
128  static char buffer[max_size];
129 
130  std::size_t const size = m_input.receive(
131  boost::asio::buffer(buffer, max_size)
132  );
133 
134  if (m_running) {
135  m_ch->PutFullData(IO_MONITORING_DATA, buffer, size);
136  }
137  }
138  }
139  }
140 };
141 
142 } // ns KM3NETDAQ
143 
144 int main(int argc, char* argv[])
145 {
146  std::string server("localhost");
147  std::string logger("localhost");
148  std::string client_name("MonRouter");
149  int debug = 0;
150  int port = 0;
151 
152  po::options_description desc("Options");
153  desc.add_options()
154  ("help,h", "Print this help and exit.")
155  ("version,v", "Print the version and exit.")
156  (
157  ",H"
158  , po::value<std::string>(&server)->default_value(server)
159  , "Set the address of the SM server."
160  )
161  (
162  ",M"
163  , po::value<std::string>(&logger)->default_value(logger)
164  , "Set the address of the logger server."
165  )
166  (
167  ",u"
168  , po::value<std::string>(&client_name)->default_value(client_name)
169  , "Set the address of the client name."
170  )
171  (
172  ",P"
173  , po::value<int>(&port)->required()
174  , "Set the UDP port to read data from"
175  )
176  (
177  ",d"
178  , po::value<int>(&debug)->default_value(debug)
179  , "Set the debug level."
180  );
181 
182  try {
183  po::variables_map vm;
184  po::store(
185  po::command_line_parser(argc, argv).options(desc).run(),
186  vm
187  );
188 
189  if (vm.count("help")) {
190  std::cout << desc << std::endl;
191  return EXIT_SUCCESS;
192  }
193 
194  if (vm.count("version")) {
195  std::cout << monrouter::version::v() << std::endl;
196  return EXIT_SUCCESS;
197  }
198 
199  po::notify(vm);
200  } catch (const po::error& e) {
201  std::cerr << "MonRouter: Error: " << e.what() << '\n'
202  << desc << std::endl;
203  return EXIT_FAILURE;
204  } catch (const std::runtime_error& e) {
205  std::cerr << "MonRouter: Error: " << e.what() << '\n'
206  << desc << std::endl;
207  return EXIT_FAILURE;
208  }
209 
210  // Logger for the main thread (used in JDAQClient)
212 
213  KM3NETDAQ::MonitorRouter router(client_name, server, log, debug, port);
214 
215  router.enter();
216  router.run();
217 }
int main(int argc, char *argv[])
Definition: Main.cc:15
JDAQStateMachine::ev_configure_event ev_configure
virtual void actionPause(int length, const char *buffer)
Definition: monrouter.cpp:106
ControlHost class.
virtual void actionStart(int length, const char *buffer)
Definition: monrouter.cpp:89
bool has(const int file_descriptor) const
Has file descriptor.
void set(const int file_descriptor)
Set file descriptor.
int run_number
Definition: JDAQCHSM.chsm:156
MonitorRouter(std::string const &name, std::string const &server, JLogger *logger, const int level, int port)
Definition: monrouter.cpp:35
Interface for logging messages.
Definition: JLogger.hh:22
Message logging based on ControlHost.
virtual void actionReset(int length, const char *buffer)
Definition: monrouter.cpp:58
virtual void actionRunning()
This method is repeatedly called when this client machine is in state Running and the clock interval ...
Definition: monrouter.cpp:116
std::string name
Definition: JDAQCHSM.chsm:154
void replaceEvent(const JTag &oldTag, const JTag &newTag, JDAQEvent_t &event)
Replace tag of given event in event table.
Definition: JDAQClient.hh:492
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:800
virtual void actionQuit(int length, const char *buffer)
Definition: monrouter.cpp:83
void run()
Run as run control client following command messages via JNET::JControlHost.
Definition: JDAQClient.hh:661
virtual void actionEnter()
Interface methods for actions corresponding to state transitions.
Definition: monrouter.cpp:54
boost::asio::io_service m_service
Definition: monrouter.cpp:28
boost::property_tree::ptree parse(std::string str)
Definition: configure.hh:24
int getDetectorID() const
Get detector identifier.
Definition: JDAQCHSM.chsm:89
virtual void actionSelect(const JFileDescriptorMask &mask)
Action method following last select call.
Definition: monrouter.cpp:123
then usage $script[port]< option > nPossible options
boost::asio::ip::udp::socket m_input
Definition: monrouter.cpp:29
Auxiliary class for method select.
void store(const std::string &file_name, const JDetector &detector)
Store detector to output file.
int debug
debug level
Definition: JSirene.cc:63
static const JNET::JTag RC_MONITORING_ROUTER
Definition: JDAQTags.hh:55
boost::scoped_ptr< JControlHost > m_ch
Definition: monrouter.cpp:27
virtual void actionStop(int length, const char *buffer)
Definition: monrouter.cpp:100
General purpose message reporting.
int getRunNumber() const
Get run number.
Definition: JDAQCHSM.chsm:100
virtual void actionExit()
Definition: monrouter.cpp:55
Control unit client base class.
Definition: JDAQClient.hh:272
virtual bool enter(const JArgs &args)
Enter the state machine.
Definition: JDAQClient.hh:363
JMessageLogger logger
message logger
Definition: JDAQClient.hh:801
Fixed parameters andd ControlHost tags for KM3NeT DAQ.
static const JNET::JTag RC_CMD
Definition: JDAQTags.hh:44
int detector_id
Definition: JDAQCHSM.chsm:155
virtual void setSelect(JFileDescriptorMask &mask) const
Set the file descriptor mask for the select call.
Definition: monrouter.cpp:118
data_type v[N+1][M+1]
Definition: JPolint.hh:740
static const JNET::JTag IO_MONITORING_DATA
Definition: JDAQTags.hh:69
virtual void actionInit(int length, const char *buffer)
Definition: monrouter.cpp:57
virtual void actionConfigure(int length, const char *buffer)
Definition: monrouter.cpp:60
virtual void actionContinue(int length, const char *buffer)
Definition: monrouter.cpp:111