ifw  0.0.1-dev
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
requestor.hpp
Go to the documentation of this file.
1 #ifndef OCF_OCM_SERVERCTL_REQUESTOR_HPP_
2 #define OCF_OCM_SERVERCTL_REQUESTOR_HPP_
3 
4 #include <iostream>
5 #include <unordered_map>
6 #include <vector>
7 
8 #include <boost/asio/io_service.hpp>
9 #include <boost/program_options.hpp>
10 
11 #include <rad/MsgRequestor.hpp>
12 
14 
15 struct CommonArgs {
16  unsigned timeout;
17  std::string request_ep;
18  std::string publish_ep;
19 
20  CommonArgs() = default;
21  CommonArgs(CommonArgs const&) = delete;
22  CommonArgs& operator=(CommonArgs const&) = delete;
23 };
24 
25 struct Requestor {
26  Requestor(boost::asio::io_service& ctx, CommonArgs& args);
27  virtual ~Requestor() {}
28  virtual std::string Synopsis();
32  virtual void AddOptions(boost::program_options::options_description& descr);
36  virtual int Handle(boost::program_options::variables_map& vm, std::vector<std::string>& opts) = 0;
37 protected:
38  boost::asio::io_service& m_io_ctx;
40 };
41 
53 template <class REQ, class REP>
54 struct SimpleRequestor : Requestor {
56  int Handle(boost::program_options::variables_map& vm, std::vector<std::string>& opts) override {
57  m_requestor = std::make_shared<rad::MsgRequestor2<REQ, REP>>(m_args.request_ep,
58  "ocmserver-ctl", m_io_ctx);
59  m_requestor->AsyncSendReceive(REQ(),
60  [](std::error_code const& ec, REP rep) {
61  if (ec) {
62  std::cout << "Got error: " << ec.message() << std::endl;
63  } else {
64  std::cout << "Got reply: " << rep.reply() << std::endl;
65  }
66  },
67  std::chrono::seconds(m_args.timeout));
68  // The rest will take care of itself. On timeouts the loop will be stopped.
69  return 0;
70  }
71 private:
72  std::shared_ptr<rad::MsgRequestor2<REQ, REP>> m_requestor;
73 
74 };
75 
79 
81 
82 /*
83 struct StatusRequestor : Requestor {
84  using Requestor::Requestor;
85  virtual std::string Synopsis() override;
86  void AddOptions(boost::program_options::options_description& descr) override;
87  int Handle(boost::program_options::variables_map& vm, std::vector<std::string>& opts) override;
88 
89  std::string m_posarg1;
90 };*/
91 #endif // #ifndef OCF_OCM_SERVERCTL_REQUESTOR_HPP_
boost::asio::io_service & m_io_ctx
Definition: requestor.hpp:38
std::string publish_ep
Definition: requestor.hpp:18
virtual int Handle(boost::program_options::variables_map &vm, std::vector< std::string > &opts)=0
std::string request_ep
Definition: requestor.hpp:17
Definition: requestor.hpp:54
CommonArgs & operator=(CommonArgs const &)=delete
CommonArgs()=default
virtual ~Requestor()
Definition: requestor.hpp:27
int Handle(boost::program_options::variables_map &vm, std::vector< std::string > &opts) override
Definition: requestor.hpp:56
optional int32 error_code
Definition: topics.proto:14
virtual void AddOptions(boost::program_options::options_description &descr)
Definition: requestor.cpp:18
unsigned timeout
Definition: requestor.hpp:16
Definition: requestor.hpp:15
Definition: requestor.hpp:25
virtual std::string Synopsis()
Definition: requestor.cpp:13
Requestor(boost::asio::io_service &ctx, CommonArgs &args)
Definition: requestor.cpp:7
CommonArgs & m_args
Definition: requestor.hpp:39