diff --git a/Common/onelab.h b/Common/onelab.h index 615b4da960f4f404d6e48efdd441fd346b1d21bf..8cd774a8d6fd84daded221563720197176d5f8aa 100644 --- a/Common/onelab.h +++ b/Common/onelab.h @@ -798,7 +798,7 @@ namespace onelab{ } return false; } - // set the changed flag for all the parameters that depend on the give + // set the changed flag for all the parameters that depend on the given // client (or for all parameters if no client name is provided) void setChanged(bool changed, const std::string &client="") { diff --git a/Fltk/onelabGroup.cpp b/Fltk/onelabGroup.cpp index 6902d9bb4ba7778be02f8cfc12a36250205b5fea..5e72cb116a9639e64e48b91ec24fb575f35c2288 100644 --- a/Fltk/onelabGroup.cpp +++ b/Fltk/onelabGroup.cpp @@ -398,13 +398,16 @@ bool gmshLocalNetworkClient::receiveMessage(gmshLocalNetworkClient *master) case GmshSocket::GMSH_OLPARSE: { #if defined(HAVE_ONELAB_METAMODEL) - std::vector<std::string> split = SplitOLFileName(message); + std::string::size_type first = 0; + std::string name = onelab::parameter::getNextToken(message, first); + std::string fileName = onelab::parameter::getNextToken(message, first); + std::vector<std::string> split = SplitOLFileName(fileName); std::string ofileName = split[0] + split[1] ; std::ofstream outfile(ofileName.c_str()); - localSolverClient *c = new InterfacedClient(split[1],"",""); + localSolverClient *c = new InterfacedClient(name,"",""); if (outfile.is_open()) { Msg::Info("Preprocess file <%s>",ofileName.c_str()); - c->convert_onefile(message, outfile); + c->convert_onefile(fileName, outfile); } else Msg::Error("The file <%s> cannot be opened",ofileName.c_str()); @@ -421,10 +424,19 @@ bool gmshLocalNetworkClient::receiveMessage(gmshLocalNetworkClient *master) break; case GmshSocket::GMSH_CLIENT_CHANGED: { - std::string reply = onelab::server::instance()->getChanged(message) ? - "changed" : "unchanged"; + std::string::size_type first = 0; + std::string command = onelab::parameter::getNextToken(message, first); + std::string name = onelab::parameter::getNextToken(message, first); + if(command == "get"){ + std::string reply = onelab::server::instance()->getChanged(name) ? + "true" : "false"; getGmshServer()->SendMessage (GmshSocket::GMSH_CLIENT_CHANGED, reply.size(), &reply[0]); + } + else if(command == "set"){ + std::string changed = onelab::parameter::getNextToken(message, first); + onelab::server::instance()->setChanged(changed=="true"?true:false,name); + } } break; default: @@ -917,6 +929,7 @@ void onelab_cb(Fl_Widget *w, void *data) // after computing with this solver, mark the parameters as unchanged // for this solver onelab::server::instance()->setChanged(false, c->getName()); + FlGui::instance()->onelab->checkForErrors(c->getName()); } if(FlGui::instance()->onelab->stop()) break; diff --git a/contrib/onelab/python/onelab.py b/contrib/onelab/python/onelab.py index 62207b4c1eddfbd8ed06b005f0fb8baf3587bb29..4f932596d659ff299a1cfb9344a6e02d4d9bd31e 100755 --- a/contrib/onelab/python/onelab.py +++ b/contrib/onelab/python/onelab.py @@ -316,19 +316,6 @@ class client : if not self.socket or not filename : return self._send(self._GMSH_OPEN_PROJECT, filename) - - def reloadGeometry(self, filename) : - if not self.socket or not filename : - return - if os.path.splitext(filename)[1] == '.geo' : - self._send(self._GMSH_PARSE_STRING, "Delete All;") - self._send(self._GMSH_MERGE_FILE, filename) - - def mesh(self, filename) : - if not self.socket or not filename : - return - self._send(self._GMSH_PARSE_STRING, 'Mesh 3; Save "' + filename + ' ;') - self._send(self._GMSH_MERGE_FILE, filename) def sendInfo(self, msg) : if not self.socket : @@ -348,26 +335,34 @@ class client : return self._send(self._GMSH_ERROR, str(msg)) - def preProcess(self, filename) : + def preProcess(self, name, filename) : if not self.socket : return - self._send(self._GMSH_OLPARSE, filename) + msg = [name, filename] + self._send(self._GMSH_OLPARSE, '\0'.join(msg)) (t, msg) = self._receive() if t == self._GMSH_OLPARSE : - if msg == "changed" : + if msg == "true" : return True return False - def isChanged(self, clientname) : + def isChanged(self, name) : if not self.socket : return - self._send(self._GMSH_CLIENT_CHANGED, clientname) + msg = ["get", name] + self._send(self._GMSH_CLIENT_CHANGED, '\0'.join(msg)) (t, msg) = self._receive() if t == self._GMSH_CLIENT_CHANGED : - if msg == "changed" : + if msg == "true" : return True return False + def setChanged(self, name, changed) : + if not self.socket : + return + msg = ["set", name, 'true' if changed else 'false'] + self._send(self._GMSH_CLIENT_CHANGED, '\0'.join(msg)) + def waitOnSubClients(self): if not self.socket : return @@ -377,7 +372,7 @@ class client : self._numSubClients -= 1 def runNonBlockingSubClient(self, name, command, arguments=''): - if self.action == "check": + if self.action == 'check': cmd = command else: cmd = command + ' ' + arguments @@ -390,6 +385,8 @@ class client : def runSubClient(self, name, command, arguments=''): self.runNonBlockingSubClient(name, command, arguments) self.waitOnSubClients() # makes the subclient blocking + if self.action == 'compute': + self.setChanged(name, False) def run(self, name, command, arguments=''): self.runSubClient(name, command, arguments) @@ -428,7 +425,7 @@ class client : def __del__(self): self.finalize() - def call(self, cmdline, remote='', rundir='', logfile=''): + def call(self, name, cmdline, remote='', rundir='', logfile=''): cwd = None if not remote : argv = cmdline.rsplit(' ') @@ -450,9 +447,12 @@ class client : result = call.wait() if result == 0 : self._send(self._GMSH_INFO, 'call \"' + ' '.join(argv) + '\"') + if self.action == 'compute': + self.setChanged(name, False) else : for line in iter(call.stderr.readline, b''): self._send(self._GMSH_ERROR, line.rstrip().encode('utf-8')) + sys.exit(1) def upload(self, here, there, remote='') : if not here or not there :