Dripline-Cpp  v2.10.11
Dripline Implementation in C++
oscillator_service_endpoints.cc
Go to the documentation of this file.
1 /*
2  * oscillator_service_endpoints.cc
3  *
4  * Created on: May 20, 2019
5  * Author: N.S. Oblath
6  */
7 
9 
10 #include "dripline_exceptions.hh"
11 
12 #include "logger.hh"
13 #include "signal_handler.hh"
14 
15 using scarab::param_array;
16 using scarab::param_node;
17 using scarab::param_ptr_t;
18 
19 LOGGER( dlog, "oscillator_service_endpoints" );
20 
21 namespace dripline
22 {
23  oscillator_ep::oscillator_ep( const std::string& a_name ) :
24  endpoint( a_name ),
25  f_osc_svc()
26  {}
27 
29  {}
30 
31  oscillator_ep_frequency::oscillator_ep_frequency( const std::string& a_name ) :
32  oscillator_ep( a_name )
33  {}
34 
36  {}
37 
39  {
40  param_ptr_t t_reply_payload( new param_node() );
41  param_node& t_reply_node = t_reply_payload->as_node();
42  t_reply_node.add( "value", static_cast< oscillator_service_endpoints* >( f_service )->oscillator().get_frequency() );
43  return a_request->reply( dl_success(), "Get request succeeded", std::move(t_reply_payload) );
44  }
45 
47  {
48  static_cast< oscillator_service_endpoints* >( f_service )->oscillator().set_frequency( a_request->payload()["values"][0]().as_double() );
49  return a_request->reply( dl_success(), "Frequency set" );
50  }
51 
52  oscillator_ep_amplitude::oscillator_ep_amplitude( const std::string& a_name ) :
53  oscillator_ep( a_name )
54  {}
55 
57  {}
58 
60  {
61  param_ptr_t t_reply_payload( new param_node() );
62  param_node& t_reply_node = t_reply_payload->as_node();
63  t_reply_node.add( "value", static_cast< oscillator_service_endpoints* >( f_service )->oscillator().get_amplitude() );
64  return a_request->reply( dl_success(), "Get request succeeded", std::move(t_reply_payload) );
65  }
66 
68  {
69  static_cast< oscillator_service_endpoints* >( f_service )->oscillator().set_amplitude( a_request->payload()["values"][0]().as_double() );
70  return a_request->reply( dl_success(), "Frequency set" );
71  }
72 
73  oscillator_ep_in_phase::oscillator_ep_in_phase( const std::string& a_name ) :
74  oscillator_ep( a_name )
75  {}
76 
78  {}
79 
81  {
82  param_ptr_t t_reply_payload( new param_node() );
83  param_node& t_reply_node = t_reply_payload->as_node();
84  t_reply_node.add( "value", static_cast< oscillator_service_endpoints* >( f_service )->oscillator().in_phase().second );
85  return a_request->reply( dl_success(), "Get request succeeded", std::move(t_reply_payload) );
86  }
87 
89  oscillator_ep( a_name )
90  {}
91 
93  {}
94 
96  {
97  param_ptr_t t_reply_payload( new param_node() );
98  param_node& t_reply_node = t_reply_payload->as_node();
99  t_reply_node.add( "value", static_cast< oscillator_service_endpoints* >( f_service )->oscillator().quadrature().second );
100  return a_request->reply( dl_success(), "Get request succeeded", std::move(t_reply_payload) );
101  }
102 
103  oscillator_ep_iq::oscillator_ep_iq( const std::string& a_name ) :
104  oscillator_ep( a_name )
105  {}
106 
108  {}
109 
111  {
112  param_ptr_t t_reply_payload( new param_node() );
113  param_node& t_reply_node = t_reply_payload->as_node();
114  param_array t_iq_param;
115  t_iq_param.push_back( static_cast< oscillator_service_endpoints* >( f_service )->oscillator().iq().second.real() );
116  t_iq_param.push_back( static_cast< oscillator_service_endpoints* >( f_service )->oscillator().iq().second.imag() );
117  t_reply_node.add( "value", std::move(t_iq_param) );
118  return a_request->reply( dl_success(), "Get request succeeded", std::move(t_reply_payload) );
119  }
120 
121  oscillator_service_endpoints::oscillator_service_endpoints( const scarab::param_node& a_config, const scarab::authentication& a_auth ) :
122  scarab::cancelable(),
123  service( a_config, a_auth ),
124  f_oscillator(),
125  f_return( dl_success().rc_value() )
126  {
127  add_child( std::make_shared< oscillator_ep_frequency >( "frequency" ) );
128  add_child( std::make_shared< oscillator_ep_amplitude >( "amplitude" ) );
129  add_async_child( std::make_shared< oscillator_ep_in_phase >( "in_phase" ) );
130  add_async_child( std::make_shared< oscillator_ep_quadrature >( "quadrature" ) );
131  add_async_child( std::make_shared< oscillator_ep_iq >( "iq" ) );
132  }
133 
135  {
136  }
137 
139  {
140  auto t_cwrap = scarab::wrap_cancelable( *this );
141  scarab::signal_handler::add_cancelable( t_cwrap );
142 
143  try
144  {
145  run();
146  }
147  catch( std::exception& e )
148  {
149  LERROR( dlog, "Exception caught: " << e.what() );
150  LERROR( dlog, "Exiting service" );
151  f_return = dl_service_error().rc_value() / 100;
152  scarab::signal_handler::cancel_all( f_return );
153  }
154 
155  if( scarab::signal_handler::get_exited() )
156  {
157  f_return = scarab::signal_handler::get_return_code();
158  }
159 
160  return;
161  }
162 
163 } /* namespace dripline */
Basic Dripline object capable of receiving and acting on messages.
Definition: endpoint.hh:97
oscillator_ep_amplitude(const std::string &a_name)
virtual reply_ptr_t do_get_request(const request_ptr_t a_request)
virtual reply_ptr_t do_set_request(const request_ptr_t a_request)
oscillator_ep_frequency(const std::string &a_name)
virtual reply_ptr_t do_get_request(const request_ptr_t a_request)
virtual reply_ptr_t do_set_request(const request_ptr_t a_request)
oscillator_ep_in_phase(const std::string &a_name)
virtual reply_ptr_t do_get_request(const request_ptr_t a_request)
virtual reply_ptr_t do_get_request(const request_ptr_t a_request)
oscillator_ep_iq(const std::string &a_name)
oscillator_ep_quadrature(const std::string &a_name)
virtual reply_ptr_t do_get_request(const request_ptr_t a_request)
oscillator_ep(const std::string &a_name)
oscillator_service_endpoints(const scarab::param_node &a_config, const scarab::authentication &a_auth)
Primary unit of software that connects to a broker and typically provides an interface with an instru...
Definition: service.hh:85
virtual void run()
Definition: service.cc:142
bool add_async_child(endpoint_ptr_t a_endpoint_ptr)
Add an asynchronous child endpoint.
Definition: service.cc:122
bool add_child(endpoint_ptr_t a_endpoint_ptr)
Add a synchronous child endpoint.
Definition: service.cc:107
std::shared_ptr< msg_reply > reply_ptr_t
Definition: dripline_fwd.hh:24
static ::scarab::logger_type< ::scarab::spd_initializer_async_stdout_color_mt > dlog("agent", __FILE_NAME__, __LINE__)
std::shared_ptr< msg_request > request_ptr_t
Definition: dripline_fwd.hh:23
Definition: agent.hh:18
static ::scarab::logger_type< ::scarab::spd_initializer_async_stdout_color_mt > dlog("oscillator_service_endpoints", __FILE_NAME__, __LINE__)
virtual unsigned rc_value() const