Skip to content
Snippets Groups Projects
Commit c80d45bc authored by Francois Henrotte's avatar Francois Henrotte
Browse files

Implementation of the client-based flag -changed- for python clients (native...

Implementation of the client-based flag -changed- for python clients (native and interfaced). Plus some cleanup.
parent 6b9315bc
No related branches found
No related tags found
No related merge requests found
......@@ -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="")
{
......
......@@ -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,11 +424,20 @@ 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:
Msg::Warning("Received unknown message type (%d)", type);
......@@ -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;
......
......@@ -317,19 +317,6 @@ class client :
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 :
print (msg)
......@@ -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 :
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment