int DistributeGadget::process_config(ACE_Message_Block* m) { started_nodes_ = 0; node_parameters_ = std::string(m->rd_ptr()); //Grab the original XML conifguration std::string xml = controller_->get_xml_configuration(); GadgetronXML::GadgetStreamConfiguration cfg; GadgetronXML::deserialize(xml.c_str(),cfg); //Delete Gadgets up to this Gadget std::vector<GadgetronXML::Gadget>::iterator it = cfg.gadget.begin(); while ((it->name != std::string(this->module()->name())) && (it != cfg.gadget.end())) it++; it++; cfg.gadget.erase(cfg.gadget.begin(),it); //Delete Gadgets after collector it = cfg.gadget.begin(); while ((it->name != collector.value()) && (it != cfg.gadget.end())) it++; it++; cfg.gadget.erase(it,cfg.gadget.end()); std::stringstream o; GadgetronXML::serialize(cfg,o); node_xml_config_ = o.str(); Gadget* tmp = this; while (tmp->next()) { if (std::string(tmp->module()->name()) == collector.value()) break; tmp = dynamic_cast<Gadget*>(tmp->next()); } collect_gadget_ = tmp; if (!collect_gadget_) { GERROR("Failed to locate collector Gadget with name %s\n", collector.value().c_str()); return GADGET_FAIL; } else { collect_gadget_->set_parameter("pass_through_mode","true"); } return GADGET_OK; }
int DistributeGadget::process_config(ACE_Message_Block* m) { started_nodes_ = 0; node_parameters_ = std::string(m->rd_ptr()); //Grab the original XML conifguration std::string xml = controller_->get_xml_configuration(); GadgetronXML::GadgetStreamConfiguration cfg; GadgetronXML::deserialize(xml.c_str(),cfg); //Delete Gadgets up to this Gadget std::vector<GadgetronXML::Gadget>::iterator it = cfg.gadget.begin(); while ((it->name != std::string(this->module()->name())) && (it != cfg.gadget.end())) it++; it++; cfg.gadget.erase(cfg.gadget.begin(),it); //Delete Gadgets after collector it = cfg.gadget.begin(); while ((it->name != collector.value()) && (it != cfg.gadget.end())) it++; it++; cfg.gadget.erase(it,cfg.gadget.end()); std::stringstream o; GadgetronXML::serialize(cfg,o); node_xml_config_ = o.str(); Gadget* tmp = this; while (tmp->next()) { if (std::string(tmp->module()->name()) == collector.value()) break; tmp = dynamic_cast<Gadget*>(tmp->next()); } collect_gadget_ = tmp; if (!collect_gadget_) { GERROR("Failed to locate collector Gadget with name %s\n", collector.value().c_str()); return GADGET_FAIL; } else { collect_gadget_->set_parameter("pass_through_mode","true"); } // get current node ip addresses ACE_INET_Addr* the_addr_array = NULL; size_t num_of_ip = 0; int rc = ACE::get_ip_interfaces (num_of_ip, the_addr_array); if (rc != 0) { GERROR_STREAM("Retreive local ip addresses failed ... "); num_of_ip = 0; } if (the_addr_array!=NULL ) delete [] the_addr_array; for (size_t ii=0; ii<num_of_ip; ii++) { std::string ip = std::string(the_addr_array[ii].get_host_addr()); local_address_.push_back(ip); GDEBUG_STREAM("--> Local address : " << ip); } return GADGET_OK; }