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
13namespace yarp::manager {
14
15class Executable;
16
17
22{
23public:
24 virtual ~ITransition() = default;
25 virtual void kill() = 0;
26 virtual void moduleFailed() = 0;
27 virtual void refresh() {}
28 virtual void connectionFailed(void* which) {}
29 virtual void start() {}
30 virtual void stop() {}
31 virtual void startModule() {}
32 virtual void stopModule() {}
33 virtual void killModule() {}
34 virtual void connectAllPorts() {}
35 virtual void disconnectAllPorts() {}
36};
37
38
40{
41public:
56};
57
58
62class Suspended : public ITransition, public FSM::StateBase
63{
64public:
65 Suspended(Executable* pExecutable, FSM::IEventSink* pEventSink);
66 ~Suspended() override;
67
68public:
69 void start() override;
70 void stop() override;
71 void kill() override;
72 void refresh() override;
73 void moduleFailed() override;
74
75public:
77};
78
79
83class Ready : public ITransition, public FSM::StateBase
84{
85public:
86 Ready(Executable* pExecutable, FSM::IEventSink* pEventSink);
87 ~Ready() override;
88
89public:
90 void kill() override;
91 void startModule() override;
92 void moduleFailed() override;
93
94private:
95 Executable* executable;
96 bool bAborted;
97 bool checkPriorityPorts();
98 bool checkResources(bool silent=true);
99 bool timeout(double base, double timeout);
100};
101
102
103
108{
109public:
110 Connecting(Executable* pExecutable, FSM::IEventSink* pEventSink);
111 ~Connecting() override;
112
113public:
114 void refresh() override;
115 void kill() override;
116 void connectAllPorts() override;
117 void moduleFailed() override;
118
119private:
120 Executable* executable;
121 bool checkNormalPorts();
122 bool bAborted;
123};
124
125
126
130class Running : public ITransition, public FSM::StateBase
131{
132public:
133 Running(Executable* pExecutable, FSM::IEventSink* pEventSink);
134 ~Running() override;
135
136public:
137 void refresh() override;
138 void kill() override;
139 void start() override;
140 void stop() override;
141 void moduleFailed() override;
142 void connectionFailed(void* which) override;
143
144private:
145 Executable* executable;
146};
147
148
152class Dying : public ITransition, public FSM::StateBase
153{
154public:
155 Dying(Executable* pExecutable, FSM::IEventSink* pEventSink);
156 ~Dying() override;
157
158public:
159 void refresh() override;
160 void kill() override;
161 void moduleFailed() override;
162 void stopModule() override;
163 void killModule() override;
164 void disconnectAllPorts() override;
165
166private:
167 Executable* executable;
168};
169
170
174class Dead : public ITransition, public FSM::StateBase
175{
176public:
177 Dead(Executable* pExecutable, FSM::IEventSink* pEventSink);
178 ~Dead() override;
179
180public:
181 void start() override;
182 void stop() override;
183 void kill() override;
184 void refresh() override;
185 void moduleFailed() override;
186
187private:
188 Executable* executable;
189};
190
191
196{
197public:
198 ExecMachine(Executable* pExecutable);
199 ~ExecMachine() override;
200
201 void refresh();
202 void start();
203 void stop();
204 void kill();
205 void startModule();
206 void stopModule();
207 void killModule();
208 void connectAllPorts();
209 void disconnectAllPorts();
210 void moduleFailed();
211 void connectionFailed(void* which);
212
213protected:
214 void onTransition(FSM::StateBase* previous,
215 FSM::Event* event, FSM::StateBase* current) override;
216
217private:
218 Executable* executable;
219 Running* running;
220 Suspended* suspended;
221 Ready* ready;
222 Connecting* connecting;
223 Dead* dead;
224 Dying* dying;
225};
226
227} // namespace yarp::manager
228
229
230#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:108
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:54
static FSM::Event * startModuleEventOk
Definition: execstate.h:47
static FSM::Event * startModuleEventFailed
Definition: execstate.h:48
static FSM::Event * stopModuleEventFailed
Definition: execstate.h:50
static FSM::Event * killModuleEventOk
Definition: execstate.h:51
static FSM::Event * startEvent
Initializing event factory.
Definition: execstate.h:42
static FSM::Event * killEvent
Definition: execstate.h:44
static FSM::Event * connectAllPortsEventOk
Definition: execstate.h:53
static FSM::Event * disconnectAllPortsEventOk
Definition: execstate.h:55
static FSM::Event * killModuleEventFailed
Definition: execstate.h:52
static FSM::Event * failedEvent
Definition: execstate.h:45
static FSM::Event * recoverEvent
Definition: execstate.h:46
static FSM::Event * stopModuleEventOk
Definition: execstate.h:49
static FSM::Event * stopEvent
Definition: execstate.h:43
Class ExecMachine.
Definition: execstate.h:196
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:71
all transitions are used in state machine
Definition: execstate.h:22
virtual void stopModule()
Definition: execstate.h:32
virtual void startModule()
Definition: execstate.h:31
virtual void connectionFailed(void *which)
Definition: execstate.h:28
virtual void disconnectAllPorts()
Definition: execstate.h:35
virtual void start()
Definition: execstate.h:29
virtual ~ITransition()=default
virtual void connectAllPorts()
Definition: execstate.h:34
virtual void moduleFailed()=0
virtual void killModule()
Definition: execstate.h:33
virtual void refresh()
Definition: execstate.h:27
virtual void stop()
Definition: execstate.h:30
class Ready
Definition: execstate.h:84
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:131
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:63
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:76
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