9 #ifndef FAIR_MQ_SDK_COMMANDFACTORY 10 #define FAIR_MQ_SDK_COMMANDFACTORY 12 #include <fairmq/States.h> 13 #include <fairmq/tools/CppSTL.h> 18 #include <type_traits> 30 enum class Format : int {
35 enum class Result : int {
45 subscribe_to_state_change,
46 unsubscribe_from_state_change,
47 state_change_exiting_received,
50 subscription_heartbeat,
55 state_change_subscription,
56 state_change_unsubscription,
64 explicit Cmd(
const Type type) : fType(type) {}
65 virtual ~
Cmd() =
default;
67 Type GetType()
const {
return fType; }
81 :
Cmd(Type::change_state)
82 , fTransition(transition)
85 Transition GetTransition()
const {
return fTransition; }
86 void SetTransition(Transition transition) { fTransition = transition; }
89 Transition fTransition;
100 :
Cmd(Type::subscribe_to_state_change)
101 , fInterval(interval)
104 int64_t GetInterval()
const {
return fInterval; }
105 void SetInterval(int64_t interval) { fInterval = interval; }
124 :
Cmd(Type::get_properties)
125 , fRequestId(request_id)
126 , fQuery(std::move(query))
129 auto GetRequestId()
const -> std::size_t {
return fRequestId; }
130 auto SetRequestId(std::size_t requestId) ->
void { fRequestId = requestId; }
131 auto GetQuery()
const -> std::string {
return fQuery; }
132 auto SetQuery(std::string query) ->
void { fQuery = std::move(query); }
135 std::size_t fRequestId;
141 SetProperties(std::size_t request_id, std::vector<std::pair<std::string, std::string>> properties)
142 :
Cmd(Type::set_properties)
143 , fRequestId(request_id)
144 , fProperties(std::move(properties))
147 auto GetRequestId()
const -> std::size_t {
return fRequestId; }
148 auto SetRequestId(std::size_t requestId) ->
void { fRequestId = requestId; }
149 auto GetProps()
const -> std::vector<std::pair<std::string, std::string>> {
return fProperties; }
150 auto SetProps(std::vector<std::pair<std::string, std::string>> properties) ->
void { fProperties = std::move(properties); }
153 std::size_t fRequestId;
154 std::vector<std::pair<std::string, std::string>> fProperties;
160 :
Cmd(Type::subscription_heartbeat)
161 , fInterval(interval)
164 int64_t GetInterval()
const {
return fInterval; }
165 void SetInterval(int64_t interval) { fInterval = interval; }
173 explicit CurrentState(
const std::string&
id, State currentState)
174 :
Cmd(Type::current_state)
176 , fCurrentState(currentState)
179 std::string GetDeviceId()
const {
return fDeviceId; }
180 void SetDeviceId(
const std::string& deviceId) { fDeviceId = deviceId; }
181 fair::mq::State GetCurrentState()
const {
return fCurrentState; }
182 void SetCurrentState(fair::mq::State state) { fCurrentState = state; }
185 std::string fDeviceId;
186 fair::mq::State fCurrentState;
191 explicit TransitionStatus(
const std::string& deviceId,
const uint64_t taskId,
const Result result,
const Transition transition)
192 :
Cmd(Type::transition_status)
193 , fDeviceId(deviceId)
196 , fTransition(transition)
199 std::string GetDeviceId()
const {
return fDeviceId; }
200 void SetDeviceId(
const std::string& deviceId) { fDeviceId = deviceId; }
201 uint64_t GetTaskId()
const {
return fTaskId; }
202 void SetTaskId(
const uint64_t taskId) { fTaskId = taskId; }
203 Result GetResult()
const {
return fResult; }
204 void SetResult(
const Result result) { fResult = result; }
205 Transition GetTransition()
const {
return fTransition; }
206 void SetTransition(
const Transition transition) { fTransition = transition; }
209 std::string fDeviceId;
212 Transition fTransition;
217 explicit Config(
const std::string&
id,
const std::string& config)
223 std::string GetDeviceId()
const {
return fDeviceId; }
224 void SetDeviceId(
const std::string& deviceId) { fDeviceId = deviceId; }
225 std::string GetConfig()
const {
return fConfig; }
226 void SetConfig(
const std::string& config) { fConfig = config; }
229 std::string fDeviceId;
236 :
Cmd(Type::state_change_subscription)
242 std::string GetDeviceId()
const {
return fDeviceId; }
243 void SetDeviceId(
const std::string& deviceId) { fDeviceId = deviceId; }
244 uint64_t GetTaskId()
const {
return fTaskId; }
245 void SetTaskId(
const uint64_t taskId) { fTaskId = taskId; }
246 Result GetResult()
const {
return fResult; }
247 void SetResult(
const Result result) { fResult = result; }
250 std::string fDeviceId;
258 :
Cmd(Type::state_change_unsubscription)
264 std::string GetDeviceId()
const {
return fDeviceId; }
265 void SetDeviceId(
const std::string& deviceId) { fDeviceId = deviceId; }
266 uint64_t GetTaskId()
const {
return fTaskId; }
267 void SetTaskId(
const uint64_t taskId) { fTaskId = taskId; }
268 Result GetResult()
const {
return fResult; }
269 void SetResult(
const Result result) { fResult = result; }
272 std::string fDeviceId;
279 explicit StateChange(
const std::string& deviceId,
const uint64_t taskId,
const State lastState,
const State currentState)
280 :
Cmd(Type::state_change)
281 , fDeviceId(deviceId)
283 , fLastState(lastState)
284 , fCurrentState(currentState)
287 std::string GetDeviceId()
const {
return fDeviceId; }
288 void SetDeviceId(
const std::string& deviceId) { fDeviceId = deviceId; }
289 uint64_t GetTaskId()
const {
return fTaskId; }
290 void SetTaskId(
const uint64_t taskId) { fTaskId = taskId; }
291 fair::mq::State GetLastState()
const {
return fLastState; }
292 void SetLastState(
const fair::mq::State state) { fLastState = state; }
293 fair::mq::State GetCurrentState()
const {
return fCurrentState; }
294 void SetCurrentState(
const fair::mq::State state) { fCurrentState = state; }
297 std::string fDeviceId;
299 fair::mq::State fLastState;
300 fair::mq::State fCurrentState;
305 Properties(std::string deviceId, std::size_t requestId,
const Result result, std::vector<std::pair<std::string, std::string>> properties)
306 :
Cmd(Type::properties)
307 , fDeviceId(std::move(deviceId))
308 , fRequestId(requestId)
310 , fProperties(std::move(properties))
313 auto GetDeviceId()
const -> std::string {
return fDeviceId; }
314 auto SetDeviceId(std::string deviceId) ->
void { fDeviceId = std::move(deviceId); }
315 auto GetRequestId()
const -> std::size_t {
return fRequestId; }
316 auto SetRequestId(std::size_t requestId) ->
void { fRequestId = requestId; }
317 auto GetResult()
const -> Result {
return fResult; }
318 auto SetResult(Result result) ->
void { fResult = result; }
319 auto GetProps()
const -> std::vector<std::pair<std::string, std::string>> {
return fProperties; }
320 auto SetProps(std::vector<std::pair<std::string, std::string>> properties) ->
void { fProperties = std::move(properties); }
323 std::string fDeviceId;
324 std::size_t fRequestId;
326 std::vector<std::pair<std::string, std::string>> fProperties;
330 PropertiesSet(std::string deviceId, std::size_t requestId, Result result)
331 :
Cmd(Type::properties_set)
332 , fDeviceId(std::move(deviceId))
333 , fRequestId(requestId)
337 auto GetDeviceId()
const -> std::string {
return fDeviceId; }
338 auto SetDeviceId(std::string deviceId) ->
void { fDeviceId = std::move(deviceId); }
339 auto GetRequestId()
const -> std::size_t {
return fRequestId; }
340 auto SetRequestId(std::size_t requestId) ->
void { fRequestId = requestId; }
341 auto GetResult()
const -> Result {
return fResult; }
342 auto SetResult(Result result) ->
void { fResult = result; }
345 std::string fDeviceId;
346 std::size_t fRequestId;
350 template<
typename C,
typename... Args>
351 std::unique_ptr<Cmd> make(Args&&... args)
353 return fair::mq::tools::make_unique<C>(std::forward<Args>(args)...);
358 using container = std::vector<std::unique_ptr<Cmd>>;
363 template<
typename... Rest>
364 explicit Cmds(std::unique_ptr<Cmd>&& first, Rest&&... rest)
366 Unpack(std::forward<std::unique_ptr<Cmd>&&>(first), std::forward<Rest>(rest)...);
369 void Add(std::unique_ptr<Cmd>&& cmd) { fCmds.emplace_back(std::move(cmd)); }
371 template<
typename C,
typename... Args>
372 void Add(Args&&... args)
374 static_assert(std::is_base_of<Cmd, C>::value,
"Only types derived from fair::mq::cmd::Cmd are allowed");
375 Add(make<C>(std::forward<Args>(args)...));
378 Cmd& At(
size_t i) {
return *(fCmds.at(i)); }
380 size_t Size()
const {
return fCmds.size(); }
381 void Reset() { fCmds.clear(); }
383 std::string Serialize(
const Format type = Format::Binary)
const;
384 void Deserialize(
const std::string&,
const Format type = Format::Binary);
391 template <
class... Rest>
392 void Unpack(std::unique_ptr<Cmd>&& first, Rest&&... rest)
394 fCmds.emplace_back(std::move(first));
395 Unpack(std::forward<Rest>(rest)...);
399 using iterator = container::iterator;
400 using const_iterator = container::const_iterator;
402 auto begin() -> decltype(fCmds.begin()) {
return fCmds.begin(); }
403 auto end() -> decltype(fCmds.end()) {
return fCmds.end(); }
404 auto cbegin() -> decltype(fCmds.cbegin()) {
return fCmds.cbegin(); }
405 auto cend() -> decltype(fCmds.cend()) {
return fCmds.cend(); }
408 std::string GetResultName(
const Result result);
409 std::string GetTypeName(
const Type type);
411 inline std::ostream& operator<<(std::ostream& os,
const Result& result) {
return os << GetResultName(result); }
412 inline std::ostream& operator<<(std::ostream& os,
const Type& type) {
return os << GetTypeName(type); }
Definition: Commands.h:157
Definition: Commands.h:233
Definition: Commands.h:189
Definition: Commands.h:303
Definition: Commands.h:111
Definition: Commands.h:97
Definition: Commands.h:215
Definition: Commands.h:171
Definition: Commands.h:73
Definition: Commands.h:116
Definition: Commands.h:329
Definition: Commands.h:78
Definition: Commands.h:62
Definition: Commands.h:356
Definition: Commands.h:139
Definition: Commands.h:277
Tools for interfacing containers to the transport via polymorphic allocators.
Definition: DeviceRunner.h:23
Definition: Commands.h:92
Definition: Commands.h:121
Definition: Commands.h:255