bool ResYarpPort::satisfy(GenericResource* resource) { if(!getAvailability() || getDisable()) return false; ResYarpPort* resport = dynamic_cast<ResYarpPort*>(resource); if(!resport) return false; return (strPort == string(resport->getPort()) || strPort == string(resport->getName()) ); }
bool Manager::updateResources(void) { YarpBroker broker; broker.init(); // finding all available yarp ports vector<string> ports; broker.getAllPorts(ports); ResourcePContainer allresources = knowledge.getResources(); for(unsigned int i=0; i<allresources.size(); i++) { Computer* comp = dynamic_cast<Computer*>(allresources[i]); if(updateResource(comp)) { //set all as unavailable for(int i=0; i<comp->peripheralCount(); i++) { ResYarpPort* res = dynamic_cast<ResYarpPort*>(&comp->getPeripheralAt(i)); if(res) res->setAvailability(false); } // adding all available yarp ports as peripherals for(unsigned int i=0; i<ports.size(); i++) { ResYarpPort resport; resport.setName(ports[i].c_str()); resport.setPort(ports[i].c_str()); bool bfound = false; for(int i=0; i<comp->peripheralCount(); i++) { ResYarpPort* res = dynamic_cast<ResYarpPort*>(&comp->getPeripheralAt(i)); if(res && (string(res->getName()) == string(resport.getName()))) { res->setAvailability(true); bfound = true; break; } } if(!bfound) comp->addPeripheral(resport); } } } // end of for return true; }
Application* XmlAppLoader::parsXml(const char* szFile) { app.clear(); ErrorLogger* logger = ErrorLogger::Instance(); TiXmlDocument doc(szFile); if(!doc.LoadFile()) { OSTRINGSTREAM err; err<<"Syntax error while loading "<<szFile<<" at line "\ <<doc.ErrorRow()<<": "; err<<doc.ErrorDesc(); logger->addError(err); return NULL; } /* retrieving root element */ TiXmlElement *root = doc.RootElement(); if(!root) { OSTRINGSTREAM err; err<<"Syntax error while loading "<<szFile<<" . "; err<<"No root element."; logger->addError(err); return NULL; } if(!compareString(root->Value(), "application")) { //OSTRINGSTREAM err; //err<<"File "<<szFile<<" has no tag <application>."; //logger->addError(err); return NULL; } /* retrieving name */ TiXmlElement* name = (TiXmlElement*) root->FirstChild("name"); if(!name || !name->GetText()) { OSTRINGSTREAM err; err<<"Module from "<<szFile<<" has no name."; logger->addError(err); //return NULL; } app.setXmlFile(szFile); if(name) { string strname = name->GetText(); for(unsigned int i=0; i<strname.size(); i++) if(strname[i] == ' ') strname[i] = '_'; app.setName(strname.c_str()); } /* retrieving description */ TiXmlElement* desc; if((desc = (TiXmlElement*) root->FirstChild("description"))) app.setDescription(desc->GetText()); /* retrieving version */ TiXmlElement* ver; if((ver = (TiXmlElement*) root->FirstChild("version"))) app.setVersion(ver->GetText()); /* * TODO: setting prefix of the main application is inactivated. * Check this should be supported in future or not! */ /* //retrieving application prefix TiXmlElement* pref; if((pref = (TiXmlElement*) root->FirstChild("prefix"))) app.setPrefix(pref->GetText()); */ /* retrieving authors information*/ TiXmlElement* authors; if((authors = (TiXmlElement*) root->FirstChild("authors"))) for(TiXmlElement* ath = authors->FirstChildElement(); ath; ath = ath->NextSiblingElement()) { if(compareString(ath->Value(), "author")) { Author author; if(ath->GetText()) author.setName(ath->GetText()); if(ath->Attribute("email")) author.setEmail(ath->Attribute("email")); app.addAuthor(author); } else { OSTRINGSTREAM war; war<<"Unrecognized tag from "<<szFile<<" at line "\ <<ath->Row()<<"."; logger->addWarning(war); } } /* retrieving resources information*/ TiXmlElement* resources; if((resources = (TiXmlElement*) root->FirstChild("dependencies"))) for(TiXmlElement* res = resources->FirstChildElement(); res; res = res->NextSiblingElement()) { if(compareString(res->Value(), "port")) { if(res->GetText()) { ResYarpPort resource(res->GetText()); resource.setPort(res->GetText()); app.addResource(resource); } } else { OSTRINGSTREAM war; war<<"Unrecognized tag from "<<szFile<<" at line "\ <<res->Row()<<"."; logger->addWarning(war); } } /* retrieving modules information*/ for(TiXmlElement* mod = root->FirstChildElement(); mod; mod = mod->NextSiblingElement()) { if(compareString(mod->Value(), "module")) { TiXmlElement* element; if((element = (TiXmlElement*) mod->FirstChild("name"))) { ModuleInterface module(element->GetText()); if((element = (TiXmlElement*) mod->FirstChild("node"))) module.setHost(element->GetText()); if((element = (TiXmlElement*) mod->FirstChild("parameters"))) module.setParam(element->GetText()); if((element = (TiXmlElement*) mod->FirstChild("stdio"))) module.setStdio(element->GetText()); if((element = (TiXmlElement*) mod->FirstChild("workdir"))) module.setWorkDir(element->GetText()); if((element = (TiXmlElement*) mod->FirstChild("deployer"))) module.setBroker(element->GetText()); if((element = (TiXmlElement*) mod->FirstChild("prefix"))) module.setPrefix(element->GetText()); if((element = (TiXmlElement*) mod->FirstChild("rank"))) module.setRank(atoi(element->GetText())); #ifdef WITH_GEOMETRY element = (TiXmlElement*) mod->FirstChild("geometry"); if(element && element->GetText()) { yarp::os::Property prop(element->GetText()); GraphicModel model; GyPoint pt; if(prop.check("Pos")) { pt.x = prop.findGroup("Pos").find("x").asDouble(); pt.y = prop.findGroup("Pos").find("y").asDouble(); model.points.push_back(pt); module.setModelBase(model); } } #endif /* retrieving resources information*/ TiXmlElement* resources; if((resources = (TiXmlElement*) mod->FirstChild("dependencies"))) { for(TiXmlElement* res = resources->FirstChildElement(); res; res = res->NextSiblingElement()) { if(compareString(res->Value(), "port")) { if(res->GetText()) { ResYarpPort resource(res->GetText()); resource.setPort(res->GetText()); if(res->Attribute("timeout")) resource.setTimeout(atof(res->Attribute("timeout"))); if(res->Attribute("request")) resource.setRequest(res->Attribute("request")); if(res->Attribute("reply")) resource.setReply(res->Attribute("reply")); module.addResource(resource); } } else { OSTRINGSTREAM war; war<<"Unrecognized tag from "<<szFile<<" at line "\ <<res->Row()<<"."; logger->addWarning(war); } } } /* retrieving portmaps */ for(TiXmlElement* map = mod->FirstChildElement(); map; map = map->NextSiblingElement()) if(compareString(map->Value(), "portmap")) { TiXmlElement* first; TiXmlElement* second; if((first=(TiXmlElement*) map->FirstChild("old")) && (second=(TiXmlElement*) map->FirstChild("new")) ) { Portmap portmap(first->GetText(), second->GetText()); module.addPortmap(portmap); } } app.addImodule(module); } else { OSTRINGSTREAM war; war<<"Module from "<<szFile<<" at line "\ <<mod->Row()<<" has not name tag."; logger->addWarning(war); } } } /* retrieving embedded application information*/ for(TiXmlElement* embApp = root->FirstChildElement(); embApp; embApp = embApp->NextSiblingElement()) { if(compareString(embApp->Value(), "application")) { TiXmlElement* name; TiXmlElement* prefix; if((name=(TiXmlElement*) embApp->FirstChild("name"))) { ApplicationInterface IApp(name->GetText()); if((prefix=(TiXmlElement*) embApp->FirstChild("prefix"))) IApp.setPrefix(prefix->GetText()); #ifdef WITH_GEOMETRY TiXmlElement* element = (TiXmlElement*) embApp->FirstChild("geometry"); if(element && element->GetText()) { yarp::os::Property prop(element->GetText()); GraphicModel model; GyPoint pt; if(prop.check("Pos")) { pt.x = prop.findGroup("Pos").find("x").asDouble(); pt.y = prop.findGroup("Pos").find("y").asDouble(); model.points.push_back(pt); IApp.setModelBase(model); } } #endif app.addIapplication(IApp); } else { OSTRINGSTREAM war; war<<"Incomplete application tag from "<<szFile<<" at line "\ <<embApp->Row()<<". (no name)"; logger->addWarning(war); } } } /* retrieving arbitrator information*/ for(TiXmlElement* arb = root->FirstChildElement(); arb; arb = arb->NextSiblingElement()) { if(compareString(arb->Value(), "arbitrator")) { TiXmlElement* port = (TiXmlElement*) arb->FirstChild("port"); if(port && port->GetText()) { Arbitrator arbitrator(port->GetText()); // retrieving rules for(TiXmlElement* rule = arb->FirstChildElement(); rule; rule = rule->NextSiblingElement()) { if(compareString(rule->Value(), "rule")) { if(rule->Attribute("connection")) arbitrator.addRule(rule->Attribute("connection"), rule->GetText()); } } #ifdef WITH_GEOMETRY TiXmlElement* geometry = (TiXmlElement*) arb->FirstChild("geometry"); if(geometry && geometry->GetText()) { yarp::os::Property prop(geometry->GetText()); GraphicModel model; if(prop.check("Pos")) { yarp::os::Bottle pos = prop.findGroup("Pos"); for(int i=1; i<pos.size(); i++) { GyPoint pt; pt.x = pos.get(i).find("x").asDouble(); pt.y = pos.get(i).find("y").asDouble(); model.points.push_back(pt); } arbitrator.setModelBase(model); } } #endif app.addArbitrator(arbitrator); } else { OSTRINGSTREAM war; war<<"Incomplete arbitrator tag from "<<szFile<<" at line "\ <<arb->Row()<<"."; logger->addWarning(war); } } } /* retrieving connections information*/ for(TiXmlElement* cnn = root->FirstChildElement(); cnn; cnn = cnn->NextSiblingElement()) { if(compareString(cnn->Value(), "connection")) { TiXmlElement* from = (TiXmlElement*) cnn->FirstChild("from"); TiXmlElement* to = (TiXmlElement*) cnn->FirstChild("to"); if(!from) from = (TiXmlElement*) cnn->FirstChild("output"); if(!to) to = (TiXmlElement*) cnn->FirstChild("input"); TiXmlElement* protocol; if(from && to) { string strCarrier; if((protocol=(TiXmlElement*) cnn->FirstChild("protocol")) && protocol->GetText()) strCarrier = protocol->GetText(); Connection connection(from->GetText(), to->GetText(), strCarrier.c_str()); if(from->Attribute("external") && compareString(from->Attribute("external"), "true")) { connection.setFromExternal(true); if(from->GetText()) { ResYarpPort resource(from->GetText()); resource.setPort(from->GetText()); app.addResource(resource); } } if(to->Attribute("external") && compareString(to->Attribute("external"), "true")) { if(to->GetText()) { connection.setToExternal(true); ResYarpPort resource(to->GetText()); resource.setPort(to->GetText()); app.addResource(resource); } } //Connections which have the same port name in Port Resources // should also be set as external for(int i=0; i<app.resourcesCount(); i++) { ResYarpPort res = app.getResourceAt(i); if(compareString(res.getPort(), connection.from())) connection.setFromExternal(true); if(compareString(res.getPort(), connection.to())) connection.setToExternal(true); } if(cnn->Attribute("id")) connection.setId(cnn->Attribute("id")); if(cnn->Attribute("persist") && compareString(cnn->Attribute("persist"), "true")) connection.setPersistent(true); #ifdef WITH_GEOMETRY TiXmlElement* geometry = (TiXmlElement*) cnn->FirstChild("geometry"); if(geometry && geometry->GetText()) { yarp::os::Property prop(geometry->GetText()); GraphicModel model; if(prop.check("Pos")) { yarp::os::Bottle pos = prop.findGroup("Pos"); for(int i=1; i<pos.size(); i++) { GyPoint pt; pt.x = pos.get(i).find("x").asDouble(); pt.y = pos.get(i).find("y").asDouble(); model.points.push_back(pt); } connection.setModelBase(model); } } #endif app.addConnection(connection); } else { OSTRINGSTREAM war; war<<"Incomplete connection tag from "<<szFile<<" at line "\ <<cnn->Row()<<"."; logger->addWarning(war); } } } return &app; }
Module* XmlModLoader::parsXml(const char* szFile) { module.clear(); ErrorLogger* logger = ErrorLogger::Instance(); TiXmlDocument doc(szFile); if(!doc.LoadFile()) { OSTRINGSTREAM err; err<<"Syntax error while loading "<<szFile<<" at line "\ <<doc.ErrorRow()<<": "; err<<doc.ErrorDesc(); logger->addError(err); return nullptr; } /* retrieving root module */ TiXmlElement *root = doc.RootElement(); if(!root) { OSTRINGSTREAM err; err<<"Syntax error while loading "<<szFile<<" . "; err<<"No root element."; logger->addError(err); return nullptr; } if(!compareString(root->Value(), "module")) { /* OSTRINGSTREAM msg; msg<<szFile<<" is not a module descriptor file."; logger->addWarning(msg); */ return nullptr; } /* retrieving name */ auto* name = (TiXmlElement*) root->FirstChild("name"); if(!name || !name->GetText()) { OSTRINGSTREAM err; err<<"Module from "<<szFile<<" has no name."; logger->addError(err); //return NULL; } for(TiXmlElement* var = root->FirstChildElement("var"); var; var = var->NextSiblingElement()) { if(var->Attribute("name") && var->GetText()) { parser->addVariable(var->Attribute("name"), var->GetText()); } } module.setXmlFile(szFile); if(name) module.setName(parser->parseText(name->GetText()).c_str()); /* retrieving description */ TiXmlElement* desc; if((desc = (TiXmlElement*) root->FirstChild("description"))) module.setDescription(parser->parseText(desc->GetText()).c_str()); /* retrieving version */ TiXmlElement* ver; if((ver = (TiXmlElement*) root->FirstChild("version"))) module.setVersion(parser->parseText(ver->GetText()).c_str()); /* retrieving parameter */ TiXmlElement* arguments; if((arguments = (TiXmlElement*) root->FirstChild("arguments"))) for(TiXmlElement* param = arguments->FirstChildElement(); param; param = param->NextSiblingElement()) { if(compareString(param->Value(), "param")) { if(param->GetText()) { bool brequired = false; if(compareString(param->Attribute("required"), "yes")) brequired = true; Argument arg(parser->parseText(param->GetText()).c_str(), brequired, param->Attribute("desc")); arg.setDefault(param->Attribute("default")); module.addArgument(arg); } } else if(compareString(param->Value(), "switch")) { if(param->GetText()) { bool brequired = false; if(compareString(param->Attribute("required"), "yes")) brequired = true; Argument arg(parser->parseText(param->GetText()).c_str(), brequired, param->Attribute("desc"), true); arg.setDefault(param->Attribute("default")); module.addArgument(arg); } } else { OSTRINGSTREAM war; war<<"Unrecognized tag from "<<szFile<<" at line "\ <<param->Row()<<"."; logger->addWarning(war); } } /* retrieving rank */ TiXmlElement* rank; if((rank = (TiXmlElement*) root->FirstChild("rank")) && rank->GetText()) module.setRank(atoi(parser->parseText(rank->GetText()).c_str())); /* retrieving authors information*/ TiXmlElement* authors; if((authors = (TiXmlElement*) root->FirstChild("authors"))) for(TiXmlElement* ath = authors->FirstChildElement(); ath; ath = ath->NextSiblingElement()) { if(compareString(ath->Value(), "author")) { Author author; if(ath->GetText()) author.setName(parser->parseText(ath->GetText()).c_str()); if(ath->Attribute("email")) author.setEmail(ath->Attribute("email")); module.addAuthor(author); } else { OSTRINGSTREAM war; war<<"Unrecognized tag from "<<szFile<<" at line "\ <<ath->Row()<<"."; logger->addWarning(war); } } /* retrieving data */ if(root->FirstChild("data")) for(TiXmlElement* data = root->FirstChild("data")->FirstChildElement(); data; data = data->NextSiblingElement()) { /* output data */ if(compareString(data->Value(), "output")) { OutputData output; if(compareString(data->Attribute("port_type"), "stream") || !data->Attribute("port_type")) output.setPortType(STREAM_PORT); else if(compareString(data->Attribute("port_type"), "event")) output.setPortType(EVENT_PORT); else if(compareString(data->Attribute("port_type"), "service")) output.setPortType(SERVICE_PORT); else { OSTRINGSTREAM war; war<<"Unknown port type \'"<<data->Attribute("port_type")<<"\' from "<<szFile<<" at line "\ <<data->Row()<<". Available types : stream, event, service"; logger->addWarning(war); } TiXmlElement* element; if(output.getPortType() != SERVICE_PORT ) { if((element = (TiXmlElement*) data->FirstChild("type"))) output.setName(parser->parseText(element->GetText()).c_str()); else { OSTRINGSTREAM war; war<<"Output data from "<<szFile<<" at line "\ <<data->Row()<<" has no type."; logger->addWarning(war); } } else output.setName("*"); if((element = (TiXmlElement*) data->FirstChild("port"))) { output.setPort(parser->parseText(element->GetText()).c_str()); output.setCarrier(element->Attribute("carrier")); } else { OSTRINGSTREAM war; war<<"Output data from "<<szFile<<" at line "\ <<data->Row()<<" has no port."; logger->addWarning(war); } if((element = (TiXmlElement*) data->FirstChild("description"))) output.setDescription(parser->parseText(element->GetText()).c_str()); module.addOutput(output); } // end of output data /* input data */ if(compareString(data->Value(), "input")) { InputData input; if(compareString(data->Attribute("port_type"), "stream") || !data->Attribute("port_type")) input.setPortType(STREAM_PORT); else if(compareString(data->Attribute("port_type"), "event")) input.setPortType(EVENT_PORT); else if(compareString(data->Attribute("port_type"), "service")) input.setPortType(SERVICE_PORT); else { OSTRINGSTREAM war; war<<"Unknown port type \'"<<data->Attribute("port_type")<<"\' from "<<szFile<<" at line "\ <<data->Row()<<". Available types : stream, event, service"; logger->addWarning(war); } TiXmlElement* element; if(input.getPortType() != SERVICE_PORT ) { if((element = (TiXmlElement*) data->FirstChild("type"))) input.setName(parser->parseText(element->GetText()).c_str()); else { OSTRINGSTREAM war; war<<"Input data from "<<szFile<<" at line "\ <<data->Row()<<" has no type."; logger->addWarning(war); } } else input.setName("rpc"); if((element = (TiXmlElement*) data->FirstChild("port"))) { input.setPort(parser->parseText(element->GetText()).c_str()); input.setCarrier(element->Attribute("carrier")); } else { OSTRINGSTREAM war; war<<"Input data from "<<szFile<<" at line "\ <<data->Row()<<" has no port."; logger->addWarning(war); } if((element = (TiXmlElement*) data->FirstChild("description"))) input.setDescription(parser->parseText(element->GetText()).c_str()); if((element = (TiXmlElement*) data->FirstChild("required"))) if(compareString(parser->parseText(element->GetText()).c_str(), "yes")) input.setRequired(true); if((element = (TiXmlElement*) data->FirstChild("priority"))) if(compareString(parser->parseText(element->GetText()).c_str(), "yes")) input.setPriority(true); module.addInput(input); } // end of input data } if(root->FirstChild("services")) { for(TiXmlElement* services = root->FirstChild("services")->FirstChildElement(); services; services = services->NextSiblingElement()) { /* server */ if(compareString(services->Value(), "server")) { InputData input; input.setPortType(SERVICE_PORT); TiXmlElement* element; if((element = (TiXmlElement*) services->FirstChild("port"))) { input.setPort(parser->parseText(element->GetText()).c_str()); input.setCarrier("tcp"); } if((element = (TiXmlElement*) services->FirstChild("description"))) input.setDescription(parser->parseText(element->GetText()).c_str()); if((element = (TiXmlElement*) services->FirstChild("type"))) input.setName(parser->parseText(element->GetText()).c_str()); else input.setName("rpc"); module.addInput(input); } /* client */ if(compareString(services->Value(), "client")) { OutputData output; output.setPortType(SERVICE_PORT); TiXmlElement* element; if((element = (TiXmlElement*) services->FirstChild("port"))) { output.setPort(parser->parseText(element->GetText()).c_str()); output.setCarrier("tcp"); } if((element = (TiXmlElement*) services->FirstChild("description"))) output.setDescription(parser->parseText(element->GetText()).c_str()); if((element = (TiXmlElement*) services->FirstChild("type"))) output.setName(parser->parseText(element->GetText()).c_str()); else output.setName("rpc"); module.addOutput(output); } } } /* retrieving broker*/ TiXmlElement* element; if((element = (TiXmlElement*) root->FirstChild("deployer"))) { module.setBroker(parser->parseText(element->GetText()).c_str()); module.setNeedDeployer(true); } /* retrieving dependencies*/ if(root->FirstChild("dependencies")) for(TiXmlElement* restag = root->FirstChild("dependencies")->FirstChildElement(); restag; restag = restag->NextSiblingElement()) { Computer computer; if(compareString(restag->Value(), "computer")) { Computer computer; computer.setXmlFile(szFile); for(TiXmlElement* comptag = restag->FirstChildElement(); comptag; comptag = comptag->NextSiblingElement()) { /* retrieving name */ if(compareString(comptag->Value(), "name")) computer.setName(parser->parseText(comptag->GetText()).c_str()); /* retrieving description */ if(compareString(comptag->Value(), "description")) computer.setDescription(parser->parseText(comptag->GetText()).c_str()); // platform if(compareString(comptag->Value(), "platform")) { Platform os; TiXmlElement* element; if((element = (TiXmlElement*) comptag->FirstChild("name"))) os.setName(parser->parseText(element->GetText()).c_str()); if((element = (TiXmlElement*) comptag->FirstChild("distribution"))) os.setDistribution(parser->parseText(element->GetText()).c_str()); if((element = (TiXmlElement*) comptag->FirstChild("release"))) os.setRelease(parser->parseText(element->GetText()).c_str()); computer.setPlatform(os); } // end of platform tag /* //multiplatform if(compareString(comptag->Value(), "multiplatform")) { MultiPlatform mltPlatform; for(TiXmlElement* mptag = comptag->FirstChild("multiplatform")->FirstChildElement(); mptag; mptag = mptag->NextSiblingElement()) { // platform if(compareString(mptag->Value(), "platform")) { Platform os; TiXmlElement* element; if((element = (TiXmlElement*) mptag->FirstChild("name"))) os.setName(element->GetText()); if((element = (TiXmlElement*) mptag->FirstChild("distribution"))) os.setDistribution(element->GetText()); if((element = (TiXmlElement*) mptag->FirstChild("release"))) os.setDistribution(element->GetText()); mltPlatform.addPlatform(os); } } module.addResource(mltPlatform); } // end of multiplatform tag */ // memory if(compareString(comptag->Value(), "memory")) { Memory mem; TiXmlElement* element; if((element = (TiXmlElement*) comptag->FirstChild("total_space"))) mem.setTotalSpace((Capacity)atol(parser->parseText(element->GetText()).c_str())); if((element = (TiXmlElement*) comptag->FirstChild("free_space"))) mem.setFreeSpace((Capacity)atol(parser->parseText(element->GetText()).c_str())); computer.setMemory(mem); } // end of memory tag // storage if(compareString(comptag->Value(), "storage")) { Storage stg; TiXmlElement* element; if((element = (TiXmlElement*) comptag->FirstChild("total_space"))) stg.setTotalSpace((Capacity)atol(parser->parseText(element->GetText()).c_str())); if((element = (TiXmlElement*) comptag->FirstChild("free_space"))) stg.setFreeSpace((Capacity)atol(parser->parseText(element->GetText()).c_str())); computer.setStorage(stg); } // end of storage tag // processor if(compareString(comptag->Value(), "processor")) { Processor proc; TiXmlElement* element; if((element = (TiXmlElement*) comptag->FirstChild("architecture"))) proc.setArchitecture(parser->parseText(element->GetText()).c_str()); if((element = (TiXmlElement*) comptag->FirstChild("model"))) proc.setModel(parser->parseText(element->GetText()).c_str()); if((element = (TiXmlElement*) comptag->FirstChild("cores"))) proc.setCores((size_t)atoi(parser->parseText(element->GetText()).c_str())); if((element = (TiXmlElement*) comptag->FirstChild("siblings"))) proc.setSiblings((size_t)atoi(parser->parseText(element->GetText()).c_str())); if((element = (TiXmlElement*) comptag->FirstChild("frequency"))) proc.setFrequency(atof(parser->parseText(element->GetText()).c_str())); computer.setProcessor(proc); } // end of processor tag // network if(compareString(comptag->Value(), "network")) { Network net; TiXmlElement* element; if((element = (TiXmlElement*) comptag->FirstChild("ip4"))) net.setIP4(parser->parseText(element->GetText()).c_str()); if((element = (TiXmlElement*) comptag->FirstChild("ip6"))) net.setIP6(parser->parseText(element->GetText()).c_str()); if((element = (TiXmlElement*) comptag->FirstChild("mac"))) net.setMAC(parser->parseText(element->GetText()).c_str()); module.addResource(net); computer.setNetwork(net); } // end of network tag // yarp_port if(compareString(comptag->Value(), "yarp_port")) { ResYarpPort yport; auto* element = (TiXmlElement*) comptag->FirstChild("name"); if(element && element->GetText()) { yport.setName(parser->parseText(element->GetText()).c_str()); yport.setPort(parser->parseText(element->GetText()).c_str()); computer.addPeripheral(yport); } else { OSTRINGSTREAM war; war<<"yarp_port from "<<szFile<<" at line " <<comptag->Row()<<" has no name."; logger->addWarning(war); } } // gpu if(compareString(comptag->Value(), "gpu")) { GPU gpu; TiXmlElement* element; if((element = (TiXmlElement*) comptag->FirstChild("name"))) gpu.setName(parser->parseText(element->GetText()).c_str()); if((element = (TiXmlElement*) comptag->FirstChild("capability"))) gpu.setCompCompatibility(parser->parseText(element->GetText()).c_str()); if((element = (TiXmlElement*) comptag->FirstChild("cores"))) gpu.setCores((size_t)atoi(parser->parseText(element->GetText()).c_str())); if((element = (TiXmlElement*) comptag->FirstChild("frequency"))) gpu.setFrequency(atof(parser->parseText(element->GetText()).c_str())); if((element = (TiXmlElement*) comptag->FirstChild("register_block"))) gpu.setResgisterPerBlock((size_t)atoi(parser->parseText(element->GetText()).c_str())); if((element = (TiXmlElement*) comptag->FirstChild("thread_block"))) gpu.setThreadPerBlock((size_t)atoi(parser->parseText(element->GetText()).c_str())); if((element = (TiXmlElement*) comptag->FirstChild("overlap"))) { if(compareString(parser->parseText(element->GetText()).c_str(), "yes")) gpu.setOverlap(true); else gpu.setOverlap(false); } // global memory if(comptag->FirstChild("global_memory")) { TiXmlElement* element; element = (TiXmlElement*) comptag->FirstChild("global_memory"); if((element = (TiXmlElement*) element->FirstChild("total_space"))) gpu.setGlobalMemory((Capacity)atol(parser->parseText(element->GetText()).c_str())); } // end of global memory tag // shared memory if(comptag->FirstChild("shared_memory")) { TiXmlElement* element; element = (TiXmlElement*) comptag->FirstChild("shared_memory"); if((element = (TiXmlElement*) element->FirstChild("total_space"))) gpu.setSharedMemory((Capacity)atol(parser->parseText(element->GetText()).c_str())); } // end of shared memory tag // constant memory if(comptag->FirstChild("constant_memory")) { TiXmlElement* element; element = (TiXmlElement*) comptag->FirstChild("constant_memory"); if((element = (TiXmlElement*) element->FirstChild("total_space"))) gpu.setConstantMemory((Capacity)atol(parser->parseText(element->GetText()).c_str())); } // end of shared memory tag computer.addPeripheral(gpu); } // end of gpu tag } // end of computer tag loop module.addResource(computer); } //end of if computer tag }// end of dependecnies tag return &module; }
bool Manager::prepare(bool silent) { knowledge.reasolveDependency(strAppName.c_str(), bAutoDependancy, silent); clearExecutables(); connections.clear(); modules.clear(); resources.clear(); connections = knowledge.getSelConnection(); modules = knowledge.getSelModules(); resources = knowledge.getSelResources(); /** * we need to initialize a module with a local broker if the * host property is set to "localhost". * * TODO: Resources should also be added to the relevant executable. up to now * all of them will be handled by manager. */ ModulePIterator itr; int id = 0; for(itr=modules.begin(); itr!=modules.end(); itr++) { Broker* broker = createBroker(*itr); Executable* exe = new Executable(broker, (MEvent*)this, bWithWatchDog); exe->setID(id++); exe->setCommand((*itr)->getName()); exe->setParam((*itr)->getParam()); exe->setHost((*itr)->getHost()); exe->setStdio((*itr)->getStdio()); exe->setWorkDir((*itr)->getWorkDir()); exe->setPostExecWait((*itr)->getPostExecWait()); string env = string("YARP_PORT_PREFIX=") + string((*itr)->getPrefix()); exe->setEnv(env.c_str()); /** * Adding connections to their owners * TODO: check whether this is still needed or not */ //CnnIterator cnn; //for(cnn=connections.begin(); cnn!=connections.end(); cnn++) // if((*cnn).owner() == (*itr)) // exe->addConnection(*cnn); /** * Adding resources to their owners */ for(unsigned int i=0; i<resources.size(); i++) { ResYarpPort* res = dynamic_cast<ResYarpPort*>(resources[i]); if(res && (res->owner() == (*itr))) exe->addResource(*res); } runnables.push_back(exe); } return true; }