00001 #ifndef artdaq_ExternalComms_CommanderInterface_hh
00002 #define artdaq_ExternalComms_CommanderInterface_hh
00003
00004 #include "fhiclcpp/ParameterSet.h"
00005 #include "artdaq/Application/Commandable.hh"
00006
00007
00008 namespace artdaq
00009 {
00013 class CommanderInterface
00014 {
00015 public:
00016
00017
00029 CommanderInterface(const fhicl::ParameterSet& ps, artdaq::Commandable& commandable)
00030 : _commandable(commandable)
00031 , _id(ps.get<int>("id", 0))
00032 {}
00033
00037 CommanderInterface(const CommanderInterface&) = delete;
00038
00043 CommanderInterface& operator=(const CommanderInterface&) = delete;
00044
00048 virtual ~CommanderInterface() = default;
00049
00072 virtual void run_server() = 0;
00073
00081 virtual std::string send_init(fhicl::ParameterSet, uint64_t, uint64_t);
00082
00090 virtual std::string send_soft_init(fhicl::ParameterSet, uint64_t, uint64_t);
00091
00099 virtual std::string send_reinit(fhicl::ParameterSet, uint64_t, uint64_t);
00100
00108 virtual std::string send_start(art::RunID, uint64_t, uint64_t);
00109
00117 virtual std::string send_pause(uint64_t, uint64_t);
00118
00126 virtual std::string send_resume(uint64_t, uint64_t);
00127
00135 virtual std::string send_stop(uint64_t, uint64_t);
00136
00144 virtual std::string send_shutdown(uint64_t);
00145
00152 virtual std::string send_status();
00153
00160 virtual std::string send_report(std::string);
00161
00168 virtual std::string send_legal_commands();
00169
00176 virtual std::string send_register_monitor(std::string);
00177
00184 virtual std::string send_unregister_monitor(std::string);
00185
00186
00187 private:
00188
00189 public:
00193 artdaq::Commandable& _commandable;
00194
00195 protected:
00196 int _id;
00197 };
00198 }
00199
00200 #define DEFINE_ARTDAQ_COMMANDER(klass) \
00201 extern "C" std::unique_ptr<artdaq::CommanderInterface> make(fhicl::ParameterSet const & ps, \
00202 artdaq::Commandable& commandable) { \
00203 return std::unique_ptr<artdaq::CommanderInterface>(new klass(ps, commandable)); \
00204 }
00205
00206
00207 #endif
00208
00209
00210
00211