void SafeManager::run() { WAIT_SEMAPHOR(); ThreadAction local_action = action; std::vector<int> local_modIds = modIds; std::vector<int> local_conIds = conIds; std::vector<int> local_resIds = resIds; POST_SEMAPHOR(); switch(local_action){ case MRUN:{ std::vector<double> waitVec; for (unsigned int i=0; i<local_modIds.size(); i++) { Executable * exec = Manager::getExecutableById(local_modIds[i]); if (exec) { waitVec.push_back(exec->getPostExecWait()); } } double minWait=*std::min_element(waitVec.begin(), waitVec.end()); for (unsigned int i=0; i<local_modIds.size(); i++) { Executable * exec = Manager::getExecutableById(local_modIds[i]); if (exec) { exec->setPostExecWait(exec->getPostExecWait() - minWait); } Manager::run(local_modIds[i], true); } /* for(unsigned int i=0; i<local_modIds.size(); i++) Manager::waitingModuleRun(local_modIds[i]); for(unsigned int i=0; i<local_conIds.size(); i++) { if(Manager::connected(local_conIds[i])) { if(eventReceiver) eventReceiver->onConConnect(local_conIds[i]); } else { if(eventReceiver) eventReceiver->onConDisconnect(local_conIds[i]); } refreshPortStatus(local_conIds[i]); } for(unsigned int i=0; i<local_resIds.size(); i++) { if(Manager::exist(local_resIds[i])) { if(eventReceiver) eventReceiver->onResAvailable(local_resIds[i]); } else { if(eventReceiver) eventReceiver->onResUnAvailable(local_resIds[i]); } }*/ break; } case MSTOP:{ std::vector<double> waitVec; for (unsigned int i=0; i<local_modIds.size(); i++) { Executable * exec = Manager::getExecutableById(local_modIds[i]); if (exec) { waitVec.push_back(exec->getPostStopWait()); } } double minWait=*std::min_element(waitVec.begin(), waitVec.end()); for (unsigned int i=0; i<local_modIds.size(); i++) { Executable * exec = Manager::getExecutableById(local_modIds[i]); if (exec) { exec->setPostStopWait(exec->getPostStopWait() - minWait); } Manager::stop(local_modIds[i], true); } /*for(unsigned int i=0; i<local_modIds.size(); i++) Manager::waitingModuleStop(local_modIds[i]); for(unsigned int i=0; i<local_conIds.size(); i++) { if(Manager::connected(local_conIds[i])) { if(eventReceiver) eventReceiver->onConConnect(local_conIds[i]); } else { if(eventReceiver) eventReceiver->onConDisconnect(local_conIds[i]); } refreshPortStatus(local_conIds[i]); } for(unsigned int i=0; i<local_resIds.size(); i++) { if(Manager::exist(local_resIds[i])) { if(eventReceiver) eventReceiver->onResAvailable(local_resIds[i]); } else { if(eventReceiver) eventReceiver->onResUnAvailable(local_resIds[i]); } }*/ break; } case MKILL:{ for(unsigned int i=0; i<local_modIds.size(); i++) Manager::kill(local_modIds[i], true); /*for(unsigned int i=0; i<local_modIds.size(); i++) Manager::waitingModuleKill(local_modIds[i]); for(unsigned int i=0; i<local_conIds.size(); i++) { if(Manager::connected(local_conIds[i])) { if(eventReceiver) eventReceiver->onConConnect(local_conIds[i]); } else { if(eventReceiver) eventReceiver->onConDisconnect(local_conIds[i]); } refreshPortStatus(local_conIds[i]); } for(unsigned int i=0; i<local_resIds.size(); i++) { if(Manager::exist(local_resIds[i])) { if(eventReceiver) eventReceiver->onResAvailable(local_resIds[i]); } else { if(eventReceiver) eventReceiver->onResUnAvailable(local_resIds[i]); } }*/ break; } case MCONNECT:{ for(unsigned int i=0; i<local_conIds.size(); i++) { if(Manager::connect(local_conIds[i])) { if(eventReceiver) eventReceiver->onConConnect(local_conIds[i]); } else { if(eventReceiver) eventReceiver->onConDisconnect(local_conIds[i]); } refreshPortStatus(local_conIds[i]); } break; } case MDISCONNECT:{ for(unsigned int i=0; i<local_conIds.size(); i++) { if(Manager::disconnect(local_conIds[i])) { if(eventReceiver) eventReceiver->onConDisconnect(local_conIds[i]); } else { if(eventReceiver) eventReceiver->onConConnect(local_conIds[i]); } refreshPortStatus(local_conIds[i]); } break; } case MREFRESH:{ busyAction = true; for(unsigned int i=0; i<local_modIds.size(); i++) { if(Manager::running(local_modIds[i])) { if(eventReceiver) eventReceiver->onModStart(local_modIds[i]); } else //if(Manager::suspended(local_modIds[i])) { if(eventReceiver) eventReceiver->onModStop(local_modIds[i]); } } for(unsigned int i=0; i<local_conIds.size(); i++) { if(Manager::connected(local_conIds[i])) { if(eventReceiver) eventReceiver->onConConnect(local_conIds[i]); } else { if(eventReceiver) eventReceiver->onConDisconnect(local_conIds[i]); } refreshPortStatus(local_conIds[i]); } for(unsigned int i=0; i<local_resIds.size(); i++) { if(Manager::exist(local_resIds[i])) { if(eventReceiver) eventReceiver->onResAvailable(local_resIds[i]); } else { if(eventReceiver) eventReceiver->onResUnAvailable(local_resIds[i]); } } busyAction = false; break; } case MREFRESH_CNN:{ for(unsigned int i=0; i<local_conIds.size(); i++) { if(Manager::connected(local_conIds[i])) { if(eventReceiver) eventReceiver->onConConnect(local_conIds[i]); } else { if(eventReceiver) eventReceiver->onConDisconnect(local_conIds[i]); } refreshPortStatus(local_conIds[i]); } break; } case MATTACHSTDOUT:{ for(unsigned int i=0; i<local_modIds.size(); i++) Manager::attachStdout(local_modIds[i]); break; } case MDETACHSTDOUT:{ for(unsigned int i=0; i<local_modIds.size(); i++) Manager::detachStdout(local_modIds[i]); break; } case MLOADBALANCE:{ busyAction = true; Manager::loadBalance(); if(eventReceiver) eventReceiver->onLoadBalance(); busyAction = false; break; } default: break; }; if(eventReceiver) eventReceiver->onError(); }