diff --git a/Common/GmshMessage.cpp b/Common/GmshMessage.cpp index 6ed43a3339211ac2cbfcdcfbfe4a1ef283735f6e..c5771d530278685368b13f84a3685ecd8b9fd493 100644 --- a/Common/GmshMessage.cpp +++ b/Common/GmshMessage.cpp @@ -27,6 +27,7 @@ #if defined(HAVE_ONELAB) #include "onelab.h" +#include "gmshLocalNetworkClient.h" #endif #if defined(HAVE_PETSC) @@ -862,6 +863,7 @@ static void _setStandardOptions(onelab::parameter *p, // numbers if(fopt.count("Visible")) p->setVisible(fopt["Visible"][0] ? true : false); if(fopt.count("ReadOnly")) p->setReadOnly(fopt["ReadOnly"][0] ? true : false); + if(fopt.count("NeverChanged")) p->setNeverChanged(fopt["NeverChanged"][0] ? true : false); if(fopt.count("ReadOnlyRange")) p->setAttribute("ReadOnlyRange", fopt["ReadOnlyRange"][0] ? "1" : "0"); if(fopt.count("AutoCheck")) @@ -1083,19 +1085,32 @@ void Msg::ImportPhysicalsAsOnelabRegions() #endif } -void Msg::RunOnelabClient(const std::string &name) +void Msg::RunOnelabClient(const std::string &name, const std::string &command) { #if defined(HAVE_ONELAB) onelab::server::citer it = onelab::server::instance()->findClient(name); - if(it == onelab::server::instance()->lastClient()){ - Msg::Error("Unknown ONELAB client `%s'", name.c_str()); - return; + onelab::client *client = 0; + if(it != onelab::server::instance()->lastClient()){ + client = it->second; + } + else{ + if(command.empty()){ + Msg::Error("Unknown ONELAB client `%s'", name.c_str()); + return; + } + onelab::string o(name + "/Action", "initialize"); + o.setVisible(false); + o.setNeverChanged(true); + onelab::server::instance()->set(o); + Msg::Info("Creating new ONELAB client `%s' (%s)", name.c_str(), command.c_str()); + client = new gmshLocalNetworkClient(name, command); + client->run(); } onelab::string o(name + "/Action", "compute"); o.setVisible(false); o.setNeverChanged(true); onelab::server::instance()->set(o); - it->second->run(); + client->run(); #endif } diff --git a/Common/GmshMessage.h b/Common/GmshMessage.h index 609c6721e8b789a798d70ffe30e14aeb00ce787b..131e47ae569e82bbe2d3d4e4160b35872762b700 100644 --- a/Common/GmshMessage.h +++ b/Common/GmshMessage.h @@ -113,7 +113,7 @@ class Msg { std::map<std::string, std::vector<double> > &fopt, std::map<std::string, std::vector<std::string> > &copt); static void UndefineOnelabParameter(const std::string &name); - static void RunOnelabClient(const std::string &name); + static void RunOnelabClient(const std::string &name, const std::string &command=""); static void ImportPhysicalsAsOnelabRegions(); };