YARP
Yet Another Robot Platform
execstate.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3  * SPDX-License-Identifier: BSD-3-Clause
4  */
5 
6 #ifndef YARP_MANAGER_Exec_State
7 #define YARP_MANAGER_Exec_State
8 
9 #include <yarp/manager/fsm.h>
10 #include <yarp/conf/api.h>
11 
12 
13 namespace yarp {
14 namespace manager {
15 
16 class Executable;
17 
18 
23 {
24 public:
25  virtual ~ITransition() = default;
26  virtual void kill() = 0;
27  virtual void moduleFailed() = 0;
28  virtual void refresh() {}
29  virtual void connectionFailed(void* which) {}
30  virtual void start() {}
31  virtual void stop() {}
32  virtual void startModule() {}
33  virtual void stopModule() {}
34  virtual void killModule() {}
35  virtual void connectAllPorts() {}
36  virtual void disconnectAllPorts() {}
37 };
38 
39 
41 {
42 public:
57 };
58 
59 
63 class Suspended : public ITransition, public FSM::StateBase
64 {
65 public:
66  Suspended(Executable* pExecutable, FSM::IEventSink* pEventSink);
67  ~Suspended() override;
68 
69 public:
70  void start() override;
71  void stop() override;
72  void kill() override;
73  void refresh() override;
74  void moduleFailed() override;
75 
76 public:
78 };
79 
80 
84 class Ready : public ITransition, public FSM::StateBase
85 {
86 public:
87  Ready(Executable* pExecutable, FSM::IEventSink* pEventSink);
88  ~Ready() override;
89 
90 public:
91  void kill() override;
92  void startModule() override;
93  void moduleFailed() override;
94 
95 private:
96  Executable* executable;
97  bool bAborted;
98  bool checkPriorityPorts();
99  bool checkResources(bool silent=true);
100  bool timeout(double base, double timeout);
101 };
102 
103 
104 
108 class Connecting : public ITransition, public FSM::StateBase
109 {
110 public:
111  Connecting(Executable* pExecutable, FSM::IEventSink* pEventSink);
112  ~Connecting() override;
113 
114 public:
115  void refresh() override;
116  void kill() override;
117  void connectAllPorts() override;
118  void moduleFailed() override;
119 
120 private:
121  Executable* executable;
122  bool checkNormalPorts();
123  bool bAborted;
124 };
125 
126 
127 
131 class Running : public ITransition, public FSM::StateBase
132 {
133 public:
134  Running(Executable* pExecutable, FSM::IEventSink* pEventSink);
135  ~Running() override;
136 
137 public:
138  void refresh() override;
139  void kill() override;
140  void start() override;
141  void stop() override;
142  void moduleFailed() override;
143  void connectionFailed(void* which) override;
144 
145 private:
146  Executable* executable;
147 };
148 
149 
153 class Dying : public ITransition, public FSM::StateBase
154 {
155 public:
156  Dying(Executable* pExecutable, FSM::IEventSink* pEventSink);
157  ~Dying() override;
158 
159 public:
160  void refresh() override;
161  void kill() override;
162  void moduleFailed() override;
163  void stopModule() override;
164  void killModule() override;
165  void disconnectAllPorts() override;
166 
167 private:
168  Executable* executable;
169 };
170 
171 
175 class Dead : public ITransition, public FSM::StateBase
176 {
177 public:
178  Dead(Executable* pExecutable, FSM::IEventSink* pEventSink);
179  ~Dead() override;
180 
181 public:
182  void start() override;
183  void stop() override;
184  void kill() override;
185  void refresh() override;
186  void moduleFailed() override;
187 
188 private:
189  Executable* executable;
190 };
191 
192 
197 {
198 public:
199  ExecMachine(Executable* pExecutable);
200  ~ExecMachine() override;
201 
202  void refresh();
203  void start();
204  void stop();
205  void kill();
206  void startModule();
207  void stopModule();
208  void killModule();
209  void connectAllPorts();
210  void disconnectAllPorts();
211  void moduleFailed();
212  void connectionFailed(void* which);
213 
214 protected:
215  void onTransition(FSM::StateBase* previous,
216  FSM::Event* event, FSM::StateBase* current) override;
217 
218 private:
219  Executable* executable;
220  Running* running;
221  Suspended* suspended;
222  Ready* ready;
223  Connecting* connecting;
224  Dead* dead;
225  Dying* dying;
226 };
227 
228 } // namespace yarp
229 } // namespace manager
230 
231 
232 #endif // __YARP_MANAGER_Exec_State__
class IEventSink
Definition: fsm.h:29
class IEventSink
Definition: fsm.h:56
Class StateBase.
Definition: fsm.h:77
Class StateMachineBase.
Definition: fsm.h:107
class Connecting
Definition: execstate.h:109
Connecting(Executable *pExecutable, FSM::IEventSink *pEventSink)
Class Connecting.
Definition: execstate.cpp:260
void kill() override
Definition: execstate.cpp:332
void moduleFailed() override
Definition: execstate.cpp:338
void connectAllPorts() override
Definition: execstate.cpp:282
void refresh() override
Definition: execstate.cpp:321
Dead(Executable *pExecutable, FSM::IEventSink *pEventSink)
Class Dead.
Definition: execstate.cpp:509
void moduleFailed() override
Definition: execstate.cpp:550
void start() override
Definition: execstate.cpp:518
void stop() override
Definition: execstate.cpp:523
void kill() override
Definition: execstate.cpp:529
void refresh() override
Definition: execstate.cpp:536
Dying(Executable *pExecutable, FSM::IEventSink *pEventSink)
Class Dying.
Definition: execstate.cpp:400
void disconnectAllPorts() override
Definition: execstate.cpp:457
void refresh() override
Definition: execstate.cpp:482
void kill() override
Definition: execstate.cpp:493
void stopModule() override
Definition: execstate.cpp:409
void moduleFailed() override
Definition: execstate.cpp:495
void killModule() override
Definition: execstate.cpp:435
static FSM::Event * connectAllPortsEventFailed
Definition: execstate.h:55
static FSM::Event * startModuleEventOk
Definition: execstate.h:48
static FSM::Event * startModuleEventFailed
Definition: execstate.h:49
static FSM::Event * stopModuleEventFailed
Definition: execstate.h:51
static FSM::Event * killModuleEventOk
Definition: execstate.h:52
static FSM::Event * startEvent
Initializing event factory.
Definition: execstate.h:43
static FSM::Event * killEvent
Definition: execstate.h:45
static FSM::Event * connectAllPortsEventOk
Definition: execstate.h:54
static FSM::Event * disconnectAllPortsEventOk
Definition: execstate.h:56
static FSM::Event * killModuleEventFailed
Definition: execstate.h:53
static FSM::Event * failedEvent
Definition: execstate.h:46
static FSM::Event * recoverEvent
Definition: execstate.h:47
static FSM::Event * stopModuleEventOk
Definition: execstate.h:50
static FSM::Event * stopEvent
Definition: execstate.h:44
Class ExecMachine.
Definition: execstate.h:197
ExecMachine(Executable *pExecutable)
Class ExecMachine.
Definition: execstate.cpp:557
void onTransition(FSM::StateBase *previous, FSM::Event *event, FSM::StateBase *current) override
Callback onTransition represents the change in the states.
Definition: execstate.cpp:718
void connectionFailed(void *which)
Definition: execstate.cpp:709
Class Executable.
Definition: executable.h:72
all transitions are used in state machine
Definition: execstate.h:23
virtual void stopModule()
Definition: execstate.h:33
virtual void startModule()
Definition: execstate.h:32
virtual void connectionFailed(void *which)
Definition: execstate.h:29
virtual void disconnectAllPorts()
Definition: execstate.h:36
virtual void start()
Definition: execstate.h:30
virtual ~ITransition()=default
virtual void connectAllPorts()
Definition: execstate.h:35
virtual void moduleFailed()=0
virtual void killModule()
Definition: execstate.h:34
virtual void refresh()
Definition: execstate.h:28
virtual void stop()
Definition: execstate.h:31
class Ready
Definition: execstate.h:85
void moduleFailed() override
Definition: execstate.cpp:254
Ready(Executable *pExecutable, FSM::IEventSink *pEventSink)
Class Ready.
Definition: execstate.cpp:86
void startModule() override
Definition: execstate.cpp:172
void kill() override
Definition: execstate.cpp:248
class Running
Definition: execstate.h:132
void connectionFailed(void *which) override
Definition: execstate.cpp:391
void refresh() override
Definition: execstate.cpp:358
void start() override
Definition: execstate.cpp:369
void moduleFailed() override
Definition: execstate.cpp:385
void stop() override
Definition: execstate.cpp:375
Running(Executable *pExecutable, FSM::IEventSink *pEventSink)
Class Running.
Definition: execstate.cpp:349
void kill() override
Definition: execstate.cpp:380
class Suspended
Definition: execstate.h:64
void kill() override
Definition: execstate.cpp:59
void stop() override
Definition: execstate.cpp:54
void refresh() override
Definition: execstate.cpp:69
Executable * executable
Definition: execstate.h:77
Suspended(Executable *pExecutable, FSM::IEventSink *pEventSink)
Class Suspended.
Definition: execstate.cpp:40
void moduleFailed() override
Definition: execstate.cpp:64
void start() override
Definition: execstate.cpp:49
The main, catch-all namespace for YARP.
Definition: dirs.h:16