YARP
Yet Another Robot Platform
 
Loading...
Searching...
No Matches
safe_manager.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3 * SPDX-License-Identifier: LGPL-2.1-or-later
4 */
5
6#ifndef SAFE_MANAGER_H
7#define SAFE_MANAGER_H
8
9
10#include <yarp/os/Thread.h>
11#include <yarp/os/Semaphore.h>
12#include <yarp/os/Property.h>
13#include <string>
14
15#include <vector>
16
18
19
33
34
36public:
38 virtual ~ApplicationEvent() {}
39 virtual void onModStart(int which) {}
40 virtual void onModStop(int which) {}
41 virtual void onModStdout(int which, const char* msg) {}
42 virtual void onConConnect(int which) {}
43 virtual void onConDisconnect(int which) {}
44 virtual void onResAvailable(int which) {}
45 virtual void onResUnAvailable(int which) {}
46 virtual void onConAvailable(int from, int to) {}
47 virtual void onConUnAvailable(int from, int to) {}
48 virtual void onError() {}
49 virtual void onLoadBalance() {}
50};
51
52
53
55{
56public:
58 ~SafeManager() override;
59 bool prepare(yarp::manager::Manager* lazy, yarp::os::Property* config, ApplicationEvent* event=nullptr);
60 void close();
61
62 bool threadInit() override;
63 void run() override;
64 void threadRelease() override;
65
66 void safeRun(std::vector<int>& MIDs, std::vector<int>& CIDs, std::vector<int>& RIDs);
67 void safeStop(std::vector<int>& MIDs, std::vector<int>& CIDs, std::vector<int>& RIDs);
68 void safeKill(std::vector<int>& MIDs, std::vector<int>& CIDs, std::vector<int>& RIDs);
69 void safeConnect(std::vector<int>& CIDs);
70 void safeDisconnect(std::vector<int>& CDs);
71 void safeRefresh(std::vector<int>& MIDs,
72 std::vector<int>& CIDs,
73 std::vector<int>& RIDs);
74 void safeAttachStdout(std::vector<int>& MIDs);
75 void safeDetachStdout(std::vector<int>& MIDs);
76 void safeLoadBalance();
77 bool busy();
78
79 bool checkSemaphore(){ return semManage.check(); }
80 void postSemaphore() { semManage.post(); }
81 void waitSemaphore() { semManage.wait(); }
82
83
84protected:
85 void onExecutableStart(void* which) override;
86 void onExecutableStop(void* which) override;
87 void onExecutableStdout(void* which, const char* msg) override;
88 void onCnnStablished(void* which) override;
89 void onExecutableDied(void* which) override;
90 void onExecutableFailed(void* which) override;
91 void onCnnFailed(void* which) override;
92 void onError(void* which) override;
93
94private:
95 yarp::os::Property* m_pConfig;
96 ThreadAction action;
97 ApplicationEvent* eventReceiver;
98 bool busyAction;
99 yarp::os::Semaphore semManage;
100 std::vector<int> modIds;
101 std::vector<int> conIds;
102 std::vector<int> resIds;
103 void refreshPortStatus(int id);
104
105};
106
107
108#endif // SAFE_MANAGER_H
virtual void onResUnAvailable(int which)
virtual void onConDisconnect(int which)
virtual void onConUnAvailable(int from, int to)
virtual void onLoadBalance()
virtual void onConConnect(int which)
virtual void onModStart(int which)
virtual void onConAvailable(int from, int to)
virtual void onModStdout(int which, const char *msg)
virtual void onModStop(int which)
virtual void onError()
virtual ~ApplicationEvent()
virtual void onResAvailable(int which)
~SafeManager() override
void safeConnect(std::vector< int > &CIDs)
void onCnnStablished(void *which) override
void safeStop(std::vector< int > &MIDs, std::vector< int > &CIDs, std::vector< int > &RIDs)
void safeRun(std::vector< int > &MIDs, std::vector< int > &CIDs, std::vector< int > &RIDs)
void onCnnFailed(void *which) override
void safeKill(std::vector< int > &MIDs, std::vector< int > &CIDs, std::vector< int > &RIDs)
void safeRefresh(std::vector< int > &MIDs, std::vector< int > &CIDs, std::vector< int > &RIDs)
void safeLoadBalance()
void onExecutableStdout(void *which, const char *msg) override
void run() override
Main body of the new thread.
void onExecutableDied(void *which) override
void onExecutableStart(void *which) override
bool threadInit() override
Initialization method.
void safeDetachStdout(std::vector< int > &MIDs)
void onError(void *which) override
void onExecutableStop(void *which) override
void threadRelease() override
Release method.
void safeAttachStdout(std::vector< int > &MIDs)
bool prepare(yarp::manager::Manager *lazy, yarp::os::Property *config, ApplicationEvent *event=nullptr)
void postSemaphore()
void safeDisconnect(std::vector< int > &CDs)
void waitSemaphore()
void onExecutableFailed(void *which) override
bool checkSemaphore()
Class Manager.
Definition manager.h:20
A class for storing options and configuration information.
Definition Property.h:33
A class for thread synchronization and mutual exclusion.
Definition Semaphore.h:25
void wait()
Decrement the counter, even if we must wait to do that.
Definition Semaphore.cpp:96
bool check()
Decrement the counter, unless that would require waiting.
void post()
Increment the counter.
An abstraction for a thread of execution.
Definition Thread.h:21
__ThreadAction
@ MLOADBALANCE
@ MNOTHING
@ MATTACHSTDOUT
@ MDISCONNECT
@ MREFRESH
@ MDETACHSTDOUT
@ MREFRESH_CNN
@ MKILL
@ MRUN
@ MSTOP
@ MCONNECT
enum __ThreadAction ThreadAction