diff --git a/Fltk/gmshLocalNetworkClient.h b/Fltk/gmshLocalNetworkClient.h index 0d86b25b524b882532fa461a47dde95330bbcfed..979b5c62d65a42a87f6821c8d3d929bb4ffc663e 100644 --- a/Fltk/gmshLocalNetworkClient.h +++ b/Fltk/gmshLocalNetworkClient.h @@ -39,7 +39,7 @@ class gmshLocalNetworkClient : public onelab::localNetworkClient{ if(i >= 0 && i < getNumClients()) return _clients[i]; return 0; } - bool receiveMessage(); + bool receiveMessage(int &type); bool run(); bool kill(); }; diff --git a/Fltk/onelabGroup.cpp b/Fltk/onelabGroup.cpp index 6a32ffdca6e6e0814448309be2c9d2594fad383d..b7d7b50cd6daa7201e4667341ff0296e90263f51 100644 --- a/Fltk/onelabGroup.cpp +++ b/Fltk/onelabGroup.cpp @@ -145,7 +145,7 @@ class onelabGmshServer : public GmshServer{ } }; -bool gmshLocalNetworkClient::receiveMessage() +bool gmshLocalNetworkClient::receiveMessage(int &type) { double timer = GetTimeInSeconds(); @@ -154,11 +154,13 @@ bool gmshLocalNetworkClient::receiveMessage() return false; } - int type, length, swap; + int length, swap; if(!getGmshServer()->ReceiveHeader(&type, &length, &swap)){ Msg::Error("Abnormal server termination (did not receive message header)"); return false; } + else if(false) + std::cout << "Received header: " << type << " from " << getName() << std::endl; std::string message(length, ' '); if(!getGmshServer()->ReceiveMessage(length, &message[0])){ @@ -346,10 +348,11 @@ bool gmshLocalNetworkClient::receiveMessage() { #if defined(HAVE_ONELAB_METAMODEL) localSolverClient *c = new InterfacedClient("OLParser","",""); - std::string ofileName = message ; + std::vector<std::string> split = SplitOLFileName(message); + std::string ofileName = split[0] + split[1] ; std::ofstream outfile(ofileName.c_str()); if (outfile.is_open()) - c->convert_onefile(ofileName + ".ol",outfile); + c->convert_onefile(message, outfile); else Msg::Error("The file <%s> cannot be opened",ofileName.c_str()); outfile.close(); @@ -398,6 +401,10 @@ bool gmshLocalNetworkClient::run() gmshLocalNetworkClient *c = 0; for(int i = 0; i < getNumClients(); i++){ c = getClient(i); + + //std::cout << " client " << i << "/" << getNumClients() + // << " pid= " << c->getPid() << std::endl; + if(c->getPid() < 0){ if(c == this){ // the "master" client stopped stop = true; @@ -428,8 +435,14 @@ bool gmshLocalNetworkClient::run() } } } + int type=0; if(stop) break; - if(haveData && !c->receiveMessage()) break; + if(haveData && !c->receiveMessage(type)) break; + if((c != this) && (type == GmshSocket::GMSH_STOP)){ + std::string reply = c->getName(); + getGmshServer()->SendMessage(GmshSocket::GMSH_STOP, reply.size(), &reply[0]); + //onelab::server::instance()->unregisterClient(c); + } if(c == this && c->getPid() < 0) break; }