ddt  0.1
ddtRemoteControl.hpp
Go to the documentation of this file.
1 // @copyright
2 // (c) Copyright ESO 2021
3 // All Rights Reserved
4 // ESO (eso.org) is an Intergovernmental Organization, and therefore special
5 // legal conditions apply.
6 //
7 // @file ddtRemoteControl.hpp
8 // @brief DDT Remote Control. Remote control interface for the DDT GUIs
9 //
10 // Library class for the remote control interface
11 //
12 // @author Carsten Mannel, CGI
13 // @since 2021/04/14
14 //
15 
16 #ifndef DATAVISUALISATION_REMOTECONTROL_SRC_INCLUDE_DDT_DDTREMOTECONTROL_HPP_
17 #define DATAVISUALISATION_REMOTECONTROL_SRC_INCLUDE_DDT_DDTREMOTECONTROL_HPP_
18 
19 #include <Ddtremotecontrolicd.hpp>
20 #include <boost/signals2/signal.hpp>
21 #include <future>
22 #include <iostream>
23 #include <mal/Cii.hpp>
24 #include <mal/rr/ServerAmi.hpp>
25 #include <mal/rr/ServerContextProvider.hpp>
26 #include <mal/rr/qos/ReplyTime.hpp>
27 #include <mal/utility/LoadMal.hpp>
28 #include <string>
29 
30 #include "ddt/ddtConstants.hpp"
31 #include "ddt/ddtLogger.hpp"
32 
33 namespace mal = ::elt::mal;
34 namespace remotecontrol = ::elt::ddt::remotecontrol;
35 
39 typedef boost::signals2::signal<void(const std::string&, const std::string&,
40  const std::vector<std::string>&)>
42 
46 typedef signal_remote::slot_type slot_remote;
47 
48 namespace ddt {
49 
51  : public virtual remotecontrol::AsyncRemoteControlRegistration {
52  public:
58  explicit DdtRemoteControl(const std::string server_uri,
59  DdtLogger* ddt_logger);
60 
64  virtual ~DdtRemoteControl();
65 
70 
78  mal::future<std::string> HandleRemoteCommand(
79  const std::string& image_widget_name, const std::string& command_name,
80  const std::vector<std::string>& command_arguments) override;
81 
82  void ProcessResponse(const std::string& response);
83 
88 
89  protected:
94 
95  private:
101  void Init(const std::string server_uri, DdtLogger* ddt_logger);
102 
108  const std::string ListCommands();
109 
113  void ServerThread();
114 
115  std::string uri_string;
116  std::unique_ptr<::elt::mal::rr::Server> server;
117 
118  const std::string SERVICE = "RemoteControl";
119  const std::string URI_PATH = "/viewer";
120 
121  boost::promise<std::string>* promise;
122  std::atomic<bool> server_busy;
123 };
124 
125 } // namespace ddt
126 
127 #endif /* DATAVISUALISATION_REMOTECONTROL_SRC_INCLUDE_DDT_DDTREMOTECONTROL_HPP_ \
128  */
ddt::DdtRemoteControl::~DdtRemoteControl
virtual ~DdtRemoteControl()
Definition: ddtRemoteControl.cpp:25
ddt::DdtLogger
Definition: ddtLogger.hpp:48
ddtConstants.hpp
ddt
Definition: ddtClient.hpp:36
ddt::DdtRemoteControl
Definition: ddtRemoteControl.hpp:51
signal_remote
boost::signals2::signal< void(const std::string &, const std::string &, const std::vector< std::string > &)> signal_remote
Definition: ddtRemoteControl.hpp:41
slot_remote
signal_remote::slot_type slot_remote
Definition: ddtRemoteControl.hpp:46
ddt::DdtRemoteControl::remote_command_signal
signal_remote remote_command_signal
Definition: ddtRemoteControl.hpp:87
pyDdtRemoteClient.response
response
Definition: pyDdtRemoteClient.py:24
ddt::DdtRemoteControl::DdtRemoteControl
DdtRemoteControl(const std::string server_uri, DdtLogger *ddt_logger)
Definition: ddtRemoteControl.cpp:20
ddtLogger.hpp
ddt::DdtRemoteControl::ProcessResponse
void ProcessResponse(const std::string &response)
Definition: ddtRemoteControl.cpp:125
ddt::DdtRemoteControl::HandleRemoteCommand
mal::future< std::string > HandleRemoteCommand(const std::string &image_widget_name, const std::string &command_name, const std::vector< std::string > &command_arguments) override
Definition: ddtRemoteControl.cpp:85
ddt::DdtRemoteControl::StartRemoteControlServer
void StartRemoteControlServer()
Definition: ddtRemoteControl.cpp:49
ddt::DdtRemoteControl::logger
DdtLogger * logger
Definition: ddtRemoteControl.hpp:93