8 #ifndef OCF_OCM_SERVERCTL_REQUESTOR_HPP_
9 #define OCF_OCM_SERVERCTL_REQUESTOR_HPP_
12 #include <type_traits>
13 #include <unordered_map>
16 #include <boost/asio/io_service.hpp>
17 #include <boost/program_options.hpp>
21 #include <rad/logger.hpp>
23 std::ostream&
operator<<(std::ostream& os, std::shared_ptr<ocmif::DaqStatus>
const& s);
24 std::ostream&
operator<<(std::ostream& os, std::shared_ptr<ocmif::DaqReply>
const& s);
25 std::ostream&
operator<<(std::ostream& os, std::vector<std::shared_ptr<ocmif::DaqStatus>>
const& s);
26 std::ostream&
operator<<(std::ostream& os, std::vector<std::shared_ptr<ocmif::AwaitDaqReply>>
const& s);
34 std::ostream&
operator<<(std::ostream& os,
JsonPrint<std::shared_ptr<ocmif::DaqStatus>>
const& s);
35 std::ostream&
operator<<(std::ostream& os,
JsonPrint<std::shared_ptr<ocmif::DaqReply>>
const& s);
36 std::ostream&
operator<<(std::ostream& os,
JsonPrint<std::shared_ptr<ocmif::AwaitDaqReply>>
const& s);
38 std::ostream&
operator<<(std::ostream& os,
JsonPrint<std::vector<std::shared_ptr<ocmif::DaqStatus>>>
const& s);
60 virtual void AddOptions(boost::program_options::options_description& descr);
64 virtual void Handle(::stdif::StdCmdsSync& std_cmds,
65 ::ocmif::OcmDaqSync& daq_cmds,
66 boost::program_options::variables_map& vm,
67 std::vector<std::string>& opts) = 0;
75 virtual std::string
Synopsis()
override;
76 virtual void Handle(::stdif::StdCmdsSync& std_cmds,
77 ::ocmif::OcmDaqSync& daq_cmds,
78 boost::program_options::variables_map& vm,
79 std::vector<std::string>& opts)
override;
93 void Handle(::stdif::StdCmdsSync& std_cmds,
94 ::ocmif::OcmDaqSync& daq_cmds,
95 boost::program_options::variables_map& vm,
96 std::vector<std::string>& opts)
override {
97 if constexpr (std::is_invocable_v<Func, decltype(std_cmds)>) {
98 auto reply = (std_cmds.*
m_func)();
102 std::cout <<
"Reply: " << reply << std::endl;
104 }
else if constexpr (std::is_invocable_v<Func, decltype(daq_cmds)>) {
105 auto reply = (daq_cmds.*
m_func)();
109 std::cout <<
"Reply: " << reply << std::endl;
122 template <
class Func>
131 void Handle(::stdif::StdCmdsSync& std_cmds,
132 ::ocmif::OcmDaqSync& daq_cmds,
133 boost::program_options::variables_map& vm,
134 std::vector<std::string>& opts)
override {
135 if (opts.size() != 2) {
136 throw std::invalid_argument(
"command requires the `id` argument");
138 auto reply = (daq_cmds.*
m_func)(opts[1]);
142 std::cout <<
"Reply: " << reply << std::endl;
150 template <
class Func>
155 void Handle(::stdif::StdCmdsSync& std_cmds,
156 ::ocmif::OcmDaqSync& daq_cmds,
157 boost::program_options::variables_map& vm,
158 std::vector<std::string>& opts)
override {
159 auto reply = (daq_cmds.*
m_func)();
163 std::cout <<
"Reply: " << reply << std::endl;
180 void AddOptions(boost::program_options::options_description& descr)
override;
181 void Handle(::stdif::StdCmdsSync& std_cmds,
182 ::ocmif::OcmDaqSync& daq_cmds,
183 boost::program_options::variables_map& vm,
184 std::vector<std::string>& opts)
override;
191 void AddOptions(boost::program_options::options_description& descr)
override;
192 void Handle(::stdif::StdCmdsSync& std_cmds,
193 ::ocmif::OcmDaqSync& daq_cmds,
194 boost::program_options::variables_map& vm,
195 std::vector<std::string>& opts)
override;
202 void AddOptions(boost::program_options::options_description& descr)
override;
203 void Handle(::stdif::StdCmdsSync& std_cmds,
204 ::ocmif::OcmDaqSync& daq_cmds,
205 boost::program_options::variables_map& vm,
206 std::vector<std::string>& opts)
override;
209 #endif // #ifndef OCF_OCM_SERVERCTL_REQUESTOR_HPP_