8 #define DRIPLINE_EXAMPLES_API_EXPORTS
13 #include "signal_handler.hh"
18 using scarab::param_array;
19 using scarab::param_node;
20 using scarab::param_ptr_t;
22 using std::placeholders::_1;
24 LOGGER(
dlog,
"oscillator_service_hub" );
31 hub( a_config, a_auth ),
33 f_return( RETURN_SUCCESS )
50 auto t_cwrap = scarab::wrap_cancelable( *
this );
51 scarab::signal_handler::add_cancelable( t_cwrap );
57 catch( std::exception& e )
59 LERROR(
dlog,
"Exception caught: " << e.what() );
60 LERROR(
dlog,
"Exiting service" );
62 scarab::signal_handler::cancel_all( f_return );
65 if( scarab::signal_handler::get_exited() )
67 f_return = scarab::signal_handler::get_return_code();
75 f_oscillator.set_frequency( a_request->payload()[
"values"][0]().as_double() );
76 return a_request->reply(
dl_success(),
"Frequency set" );
81 param_ptr_t t_reply_payload(
new param_node() );
82 param_node& t_reply_node = t_reply_payload->as_node();
83 t_reply_node.add(
"value", f_oscillator.get_frequency() );
84 return a_request->reply(
dl_success(),
"Get request succeeded", std::move(t_reply_payload) );
90 f_oscillator.set_amplitude( a_request->payload()[
"values"][0]().as_double() );
91 return a_request->reply(
dl_success(),
"Amplitude set" );
96 param_ptr_t t_reply_payload(
new param_node() );
97 param_node& t_reply_node = t_reply_payload->as_node();
98 t_reply_node.add(
"value", f_oscillator.get_amplitude() );
99 return a_request->reply(
dl_success(),
"Get request succeeded", std::move(t_reply_payload) );
131 param_ptr_t t_reply_payload(
new param_node() );
132 param_node& t_reply_node = t_reply_payload->as_node();
133 t_reply_node.add(
"value", f_oscillator.in_phase().second );
134 return a_request->reply(
dl_success(),
"Get request succeeded", std::move(t_reply_payload) );
139 param_ptr_t t_reply_payload(
new param_node() );
140 param_node& t_reply_node = t_reply_payload->as_node();
141 t_reply_node.add(
"value", f_oscillator.quadrature().second );
142 return a_request->reply(
dl_success(),
"Get request succeeded", std::move(t_reply_payload) );
147 param_ptr_t t_reply_payload(
new param_node() );
148 param_node& t_reply_node = t_reply_payload->as_node();
149 param_array t_iq_param;
150 t_iq_param.push_back( f_oscillator.iq().second.real() );
151 t_iq_param.push_back( f_oscillator.iq().second.imag() );
152 t_reply_node.add(
"value", std::move(t_iq_param) );
153 return a_request->reply(
dl_success(),
"Get request succeeded", std::move(t_reply_payload) );
Service class aimed at adding a Dripline API to an existing codebase.
void register_set_handler(const std::string &a_key, const handler_func_t &a_func)
Sets a set request handler function.
void register_get_handler(const std::string &a_key, const handler_func_t &a_func)
Sets a get request handler function.
reply_ptr_t handle_get_quadrature_request(const request_ptr_t a_request)
reply_ptr_t handle_set_amplitude_request(const request_ptr_t a_request)
oscillator_service_hub(const scarab::param_node &a_config, const scarab::authentication &a_auth)
reply_ptr_t handle_get_frequency_request(const request_ptr_t a_request)
reply_ptr_t handle_get_amplitude_request(const request_ptr_t a_request)
reply_ptr_t handle_get_iq_request(const request_ptr_t a_request)
reply_ptr_t handle_get_in_phase_request(const request_ptr_t a_request)
reply_ptr_t handle_set_frequency_request(const request_ptr_t a_request)
virtual ~oscillator_service_hub()
std::shared_ptr< msg_reply > reply_ptr_t
static ::scarab::logger_type< ::scarab::spd_initializer_async_stdout_color_mt > dlog("agent", __FILE_NAME__, __LINE__)
std::shared_ptr< msg_request > request_ptr_t
static ::scarab::logger_type< ::scarab::spd_initializer_async_stdout_color_mt > dlog("oscillator_service_hub", __FILE_NAME__, __LINE__)
virtual unsigned rc_value() const