9 #ifndef FAIR_MQ_PLUGINS_CONTROL
10 #define FAIR_MQ_PLUGINS_CONTROL
12 #include <fairmq/Plugin.h>
13 #include <fairmq/Version.h>
14 #include <fairmq/StateQueue.h>
16 #include <condition_variable>
24 namespace fair::mq::plugins
27 class Control :
public Plugin
30 Control(
const std::string& name,
const Plugin::Version version,
const std::string& maintainer,
const std::string& homepage, PluginServices* pluginServices);
35 auto InteractiveMode() -> void;
36 static auto PrintInteractiveHelpColor() -> void;
37 static auto PrintInteractiveHelp() -> void;
38 static auto PrintStateMachineColor() -> void;
39 static auto PrintStateMachine() -> void;
40 auto StaticMode() -> void;
41 auto SignalHandler() -> void;
42 auto RunShutdownSequence() -> void;
43 auto RunStartupSequence() -> void;
45 std::thread fControllerThread;
46 std::thread fSignalHandlerThread;
47 std::mutex fControllerMutex;
48 std::atomic<bool> fDeviceShutdownRequested;
49 std::atomic<bool> fDeviceHasShutdown;
50 std::atomic<bool> fPluginShutdownRequested;
54 auto ControlPluginProgramOptions() -> Plugin::ProgOptions;
56 REGISTER_FAIRMQ_PLUGIN(
59 (
Plugin::Version{FAIRMQ_VERSION_MAJOR, FAIRMQ_VERSION_MINOR, FAIRMQ_VERSION_PATCH}),
60 "FairRootGroup <fairroot@gsi.de>",
61 "https://github.com/FairRootGroup/FairMQ",
62 ControlPluginProgramOptions