Jpp 19.3.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
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
19namespace po = boost::program_options;
20#include "configure.hpp"
21
22namespace 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;
31 int m_port;
32
33 public:
34
36 std::string const& name
37 , std::string const& server
39 , const int level
40 , int port
41 )
42 :
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 assert(getRunNumber() >= 0);
92
93 m_running = true;
94 }
95
96 virtual void actionStop(int length, const char* buffer)
97 {
98 m_input.close();
99 m_ch.reset();
100 }
101
102 virtual void actionPause (int length, const char* buffer)
103 {
104 m_running = false;
105 }
106
107 virtual void actionContinue (int length, const char* buffer)
108 {
109 m_running = true;
110 }
111
112 virtual void actionRunning () {}
113
114 virtual void setSelect(JFileDescriptorMask& mask) const
115 {
116 mask.set(m_input.native_handle());
117 }
118
119 virtual void actionSelect(const JFileDescriptorMask& mask)
120 {
121 if (m_input.is_open()) {
122 if (mask.has(m_input.native_handle())) {
123 static size_t const max_size = 10000;
124 static char buffer[max_size];
125
126 std::size_t const size = m_input.receive(
127 boost::asio::buffer(buffer, max_size)
128 );
129
130 if (m_running) {
131 m_ch->PutFullData(IO_MONITORING_DATA, buffer, size);
132 }
133 }
134 }
135 }
136};
137
138} // ns KM3NETDAQ
139
140int main(int argc, char* argv[])
141{
142 std::string server("localhost");
143 std::string logger("localhost");
144 std::string client_name("MonRouter");
145 int debug = 0;
146 int port = 0;
147
148 po::options_description desc("Options");
149 desc.add_options()
150 ("help,h", "Print this help and exit.")
151 ("version,v", "Print the version and exit.")
152 (
153 ",H"
154 , po::value<std::string>(&server)->default_value(server)
155 , "Set the address of the SM server."
156 )
157 (
158 ",M"
159 , po::value<std::string>(&logger)->default_value(logger)
160 , "Set the address of the logger server."
161 )
162 (
163 ",u"
164 , po::value<std::string>(&client_name)->default_value(client_name)
165 , "Set the address of the client name."
166 )
167 (
168 ",P"
169 , po::value<int>(&port)->required()
170 , "Set the UDP port to read data from"
171 )
172 (
173 ",d"
174 , po::value<int>(&debug)->default_value(debug)
175 , "Set the debug level."
176 );
177
178 try {
179 po::variables_map vm;
180 po::store(
181 po::command_line_parser(argc, argv).options(desc).run(),
182 vm
183 );
184
185 if (vm.count("help")) {
186 std::cout << desc << std::endl;
187 return EXIT_SUCCESS;
188 }
189
190 if (vm.count("version")) {
191 std::cout << monrouter::version::v() << std::endl;
192 return EXIT_SUCCESS;
193 }
194
195 po::notify(vm);
196 } catch (const po::error& e) {
197 std::cerr << "MonRouter: Error: " << e.what() << '\n'
198 << desc << std::endl;
199 return EXIT_FAILURE;
200 } catch (const std::runtime_error& e) {
201 std::cerr << "MonRouter: Error: " << e.what() << '\n'
202 << desc << std::endl;
203 return EXIT_FAILURE;
204 }
205
206 // Logger for the main thread (used in JDAQClient)
208
209 KM3NETDAQ::MonitorRouter router(client_name, server, log, debug, port);
210
211 router.enter();
212 router.run();
213}
Fixed parameters and ControlHost tags for KM3NeT DAQ.
General purpose message reporting.
int debug
debug level
Definition JSirene.cc:72
int getRunNumber() const
Get run number.
Definition JDAQCHSM.hh:111
std::string name
Definition JDAQCHSM.hh:165
JDAQStateMachine::ev_configure_event ev_configure
Auxiliary class for method select.
void set(const int file_descriptor)
Set file descriptor.
bool has(const int file_descriptor) const
Has file descriptor.
Message logging based on ControlHost.
Interface for logging messages.
Definition JLogger.hh:22
ControlHost class.
Control unit client base class.
JSharedPointer< JControlHost > server
message server
void replaceEvent(const JTag &oldTag, const JTag &newTag, JDAQEvent_t &event)
Replace tag of given event in event table.
void run()
Run as run control client following command messages via JNET::JControlHost.
JMessageLogger logger
message logger
virtual bool enter(const JArgs &args)
Enter the state machine.
virtual void actionQuit(int length, const char *buffer)
Definition monrouter.cpp:83
MonitorRouter(std::string const &name, std::string const &server, JLogger *logger, const int level, int port)
Definition monrouter.cpp:35
virtual void actionRunning()
This method is repeatedly called when this client machine is in state Running and the clock interval ...
virtual void actionInit(int length, const char *buffer)
Definition monrouter.cpp:57
virtual void actionSelect(const JFileDescriptorMask &mask)
Action method following last select call.
virtual void actionExit()
Definition monrouter.cpp:55
virtual void actionReset(int length, const char *buffer)
Definition monrouter.cpp:58
virtual void actionEnter()
Interface methods for actions corresponding to state transitions.
Definition monrouter.cpp:54
virtual void setSelect(JFileDescriptorMask &mask) const
Set the file descriptor mask for the select call.
boost::asio::ip::udp::socket m_input
Definition monrouter.cpp:29
boost::asio::io_service m_service
Definition monrouter.cpp:28
virtual void actionContinue(int length, const char *buffer)
virtual void actionStart(int length, const char *buffer)
Definition monrouter.cpp:89
virtual void actionStop(int length, const char *buffer)
Definition monrouter.cpp:96
virtual void actionPause(int length, const char *buffer)
virtual void actionConfigure(int length, const char *buffer)
Definition monrouter.cpp:60
boost::scoped_ptr< JControlHost > m_ch
Definition monrouter.cpp:27
int main(int argc, char *argv[])
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
static const JNET::JTag RC_CMD
Definition JDAQTags.hh:66
static const JNET::JTag RC_MONITORING_ROUTER
Definition JDAQTags.hh:77
static const JNET::JTag IO_MONITORING_DATA
Definition JDAQTags.hh:91
boost::property_tree::ptree parse(std::string str)
Definition configure.hh:24