10#define WAIT_SEMAPHOR() waitSemaphore();
12#define POST_SEMAPHOR() postSemaphore();
18 eventReceiver(nullptr),
27 eventReceiver =
nullptr;
35 eventReceiver = event;
44 if (pConfig->
find(
"auto_dependency").
asString() ==
"yes") {
60 for (
auto& mod : mods) {
65 for (
auto& re : res) {
70 for (
auto& app : apps) {
99 std::vector<int> local_modIds = modIds;
100 std::vector<int> local_conIds = conIds;
101 std::vector<int> local_resIds = resIds;
104 switch(local_action){
106 std::vector<double> waitVec;
107 for (
int local_modId : local_modIds)
115 double minWait=*std::min_element(waitVec.begin(), waitVec.end());
116 for (
int local_modId : local_modIds)
156 std::vector<double> waitVec;
157 for (
int local_modId : local_modIds)
165 double minWait=*std::min_element(waitVec.begin(), waitVec.end());
166 for (
int local_modId : local_modIds)
204 for (
int local_modId : local_modIds) {
236 for(
int local_conId : local_conIds)
238 refreshPortStatus(local_conId);
255 for(
int local_conId : local_conIds)
257 refreshPortStatus(local_conId);
277 for(
int local_modId : local_modIds)
293 for(
int local_conId : local_conIds)
295 refreshPortStatus(local_conId);
310 for(
int local_resId : local_resIds)
330 for(
int local_conId : local_conIds)
332 refreshPortStatus(local_conId);
350 for (
int local_modId : local_modIds) {
357 for (
int local_modId : local_modIds) {
468 std::vector<int>& CIDs,
469 std::vector<int>& RIDs)
534 if (eventReceiver && exe) {
544 if (eventReceiver && exe) {
570 if (eventReceiver && exe) {
584 if(m_pConfig->
find(
"module_failure").
asString() ==
"prompt")
587 err<<exe->
getCommand()<<
" from "<<exe->getHost()<<
" is failed! [id:"<<exe->getID()<<
"]";
589 if (eventReceiver && exe) {
594 if(m_pConfig->
find(
"module_failure").
asString() ==
"recover")
597 err<<exe->getCommand()<<
" from "<<exe->getHost()<<
" is failed! [id:"<<exe->getID()<<
"] (restarting...)";
602 if(m_pConfig->
find(
"module_failure").
asString() ==
"terminate")
605 err<<exe->getCommand()<<
" from "<<exe->getHost()<<
" is failed! [id:"<<exe->getID()<<
"] (terminating...)";
628 if( m_pConfig->
find(
"connection_failure").
asString() ==
"prompt")
631 err<<
"connection failed between "<<cnn->
from()<<
" and "<<cnn->to();
635 if(m_pConfig->
find(
"connection_failure").
asString() ==
"terminate")
638 err<<
"connection failed between "<<cnn->from()<<
" and "<<cnn->to()<<
" (terminating...)";
670void SafeManager::refreshPortStatus(
int id)
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 onResAvailable(int which)
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 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 safeDisconnect(std::vector< int > &CDs)
void onExecutableFailed(void *which) override
Singleton class ErrorLogger.
void addError(const char *szError)
static ErrorLogger * Instance()
Singleton class ErrorLogger.
void setPostStopWait(double t)
void setPostExecWait(double t)
const char * getCommand()
const ModulePContainer & getModules(Application *parent=nullptr)
bool addResource(GenericResource *resource)
bool addModule(Module *module)
const ApplicaitonPContainer & getApplications(Application *parent=nullptr)
const ResourcePContainer & getResources(Application *parent=nullptr)
bool addApplication(Application *application, char **szAppName_=nullptr, bool modifyName=false)
bool detachStdout(unsigned int id)
bool attachStdout(unsigned int id)
bool existPortFrom(unsigned int id)
bool exist(unsigned int id)
bool existPortTo(unsigned int id)
void disableAutoDependency()
void enableAutoDependency()
KnowledgeBase * getKnowledgeBase()
void disableAutoConnect()
Executable * getExecutableById(size_t id)
A class for storing options and configuration information.
Value & find(const std::string &key) const override
Gets a value corresponding to a given keyword.
bool stop()
Stop the thread.
bool isRunning()
Returns true if the thread is running (Thread::start has been called successfully and the thread has ...
bool start()
Start the new thread running.
virtual std::string asString() const
Get string value.
std::vector< Module * > ModulePContainer
std::stringstream OSTRINGSTREAM
std::vector< GenericResource * > ResourcePContainer
std::vector< Application * > ApplicaitonPContainer
enum __ThreadAction ThreadAction