Psyllid  v1.12.4
Project 8 Data Acquisisition Software
run_server.hh
Go to the documentation of this file.
1 /*
2  * mt_run_server.hh
3  *
4  * Created on: May 6, 2015
5  * Author: nsoblath
6  */
7 
8 #ifndef PSYLLID_RUN_SERVER_HH_
9 #define PSYLLID_RUN_SERVER_HH_
10 
11 //#include "mt_version.hh"
12 
13 #include "hub.hh"
14 
15 #include "param.hh"
16 
17 #include "cancelable.hh"
18 
19 #include <atomic>
20 #include <mutex>
21 
22 namespace scarab
23 {
24  class version_semantic;
25 }
26 
27 namespace psyllid
28 {
29  class batch_executor;
30  class daq_control;
31  class request_receiver;
32  class stream_manager;
33 
47  class run_server : public scarab::cancelable
48  {
49  public:
50  run_server();
51  virtual ~run_server();
52 
53  void execute( const scarab::param_node& a_config );
54 
55  void quit_server();
56 
57  int get_return() const;
58 
59  dripline::reply_ptr_t handle_get_server_status_request( const dripline::request_ptr_t a_request );
60 
61  dripline::reply_ptr_t handle_stop_all_request( const dripline::request_ptr_t a_request );
62  dripline::reply_ptr_t handle_quit_server_request( const dripline::request_ptr_t a_request );
63 
64  private:
65  virtual void do_cancellation( int a_code );
66 
67  int f_return;
68 
69  // component pointers for asynchronous access
70  std::shared_ptr< request_receiver > f_request_receiver;
71  std::shared_ptr< batch_executor > f_batch_executor;
72  //std::shared_ptr< daq_worker > f_daq_worker;
73  std::shared_ptr< daq_control > f_daq_control;
74  std::shared_ptr< stream_manager > f_stream_manager;
75 
76  std::mutex f_component_mutex;
77 
78  public:
79  enum status
80  {
81  k_initialized = 0,
82  k_starting = 1,
83  k_running = 5,
84  k_done = 10,
85  k_error = 100
86  };
87 
88  static std::string interpret_status( status a_status );
89 
90  status get_status() const;
91  void set_status( status a_status );
92 
93  private:
94  std::atomic< status > f_status;
95 
96  };
97 
98  inline int run_server::get_return() const
99  {
100  return f_return;
101  }
102 
103  inline run_server::status run_server::get_status() const
104  {
105  return f_status.load();
106  }
107 
108  inline void run_server::set_status( status a_status )
109  {
110  f_status.store( a_status );
111  return;
112  }
113 
114 } /* namespace mantis */
115 
116 #endif /* SERVER_MT_RUN_SERVER_HH_ */
std::shared_ptr< stream_manager > f_stream_manager
Definition: run_server.hh:74
std::atomic< status > f_status
Definition: run_server.hh:94
std::shared_ptr< batch_executor > f_batch_executor
Definition: run_server.hh:71
std::shared_ptr< request_receiver > f_request_receiver
Definition: run_server.hh:70
std::shared_ptr< daq_control > f_daq_control
Definition: run_server.hh:73
std::mutex f_component_mutex
Definition: run_server.hh:76
Sets up daq_control, strea_manager and request_receiver. Registers request handles.
Definition: run_server.hh:47