diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp index c3beb1e52b68e1687a3603c21121a38010eec9e7..8234e8d320e6961d1814367408bd46fd0962aecc 100644 --- a/Common/CommandLine.cpp +++ b/Common/CommandLine.cpp @@ -908,12 +908,18 @@ void GetOptions(int argc, char *argv[]) #if !defined(HAVE_ONELAB2) CTX::instance()->solver.listen = 1; #else - CTX::instance()->batch = 1; if(argv[i]) { - CTX::instance()->onelab.listen_port = atoi(argv[i++]); + if(strstr(argv[i], "/") || strstr(argv[i], "\\") || !strstr(argv[i], ":")) // UNIX + CTX::instance()->onelab.unixSock = std::string(argv[i]); + else if(argv[i][0] == 'u') // UDT + CTX::instance()->onelab.udtSock = std::string(argv[i++]); + else if(argv[i][0] == 't') // TCP + CTX::instance()->onelab.tcpSock = std::string(argv[i++]); + else // TCP + CTX::instance()->onelab.tcpSock = std::string(argv[i]); } - else - CTX::instance()->onelab.listen_port = 1148; + else // TCP + CTX::instance()->onelab.tcpSock = "127.0.0.1:1148"; #endif } else if(!strcmp(argv[i] + 1, "minterpreter")) { diff --git a/Common/Context.h b/Common/Context.h index 7d7378a8276baeefc4d7ecd39acc58925c80d11f..0913deddcc1c0c5cd7624ae3fc4fc12e38c6a362 100644 --- a/Common/Context.h +++ b/Common/Context.h @@ -264,7 +264,8 @@ class CTX { }solver; // onelab options struct{ - short listen_port; + std::string unixSock, tcpSock, udtSock; + bool unixConnected, tcpConnected, udtConnected; }onelab; // print options struct{ diff --git a/Common/Gmsh.cpp b/Common/Gmsh.cpp index 926ead8bb1650239c0459fc26e808b9f217c0f21..3a8c67f2896c1fb7670c26cfb468f0612610859e 100644 --- a/Common/Gmsh.cpp +++ b/Common/Gmsh.cpp @@ -52,6 +52,8 @@ #if defined(HAVE_ONELAB2) #include "OnelabServer.h" +#include "OnelabDatabase.h" +#include "OnelabException.h" #endif int GmshInitialize(int argc, char **argv) @@ -238,9 +240,35 @@ int GmshBatch() Msg::GetMaxThreads(), Msg::GetMaxThreads() > 1 ? "s" : ""); Msg::Info("Started on %s", Msg::GetLaunchDate().c_str()); #if defined(HAVE_ONELAB2) - if(CTX::instance()->onelab.listen_port > 0) { - OnelabServer::instance(0, CTX::instance()->onelab.listen_port); - OnelabServer::instance()->Run(); + try { + if(CTX::instance()->onelab.unixSock.size() > 0) { // UNIX + std::ostringstream tmp; + tmp << CTX::instance()->homeDir << CTX::instance()->onelab.unixSock; + OnelabServer::instance()->listenOnUnix(tmp.str().c_str()); + } + if(CTX::instance()->onelab.tcpSock.size() > 0) { + std::size_t colon = CTX::instance()->onelab.tcpSock.find(":"); + OnelabServer::instance()->listenOnTcp( + ip4_inet_pton(CTX::instance()->onelab.tcpSock.substr(0, colon).c_str()), + atoi(CTX::instance()->onelab.tcpSock.substr(colon+1, CTX::instance()->onelab.tcpSock.size()-colon-1).c_str())); + } +#if defined(HAVE_UDT) + if(CTX::instance()->onelab.udtSock.size() > 0) { + std::size_t colon = CTX::instance()->onelab.tcpSock.find(":"); + OnelabServer::instance()->listenOnUdt( + ip4_inet_pton(CTX::instance()->onelab.tcpSock.substr(0, colon).c_str()), + atoi(CTX::instance()->onelab.tcpSock.substr(colon+1, CTX::instance()->onelab.tcpSock.size()-colon-1).c_str())); + } +#endif + } catch(NetworkException e) { + std::cout << e.what() << std::endl; + Msg::Exit(1); + } + if(CTX::instance()->onelab.unixSock.size() > 0 + || CTX::instance()->onelab.tcpSock.size() > 0 + || CTX::instance()->onelab.udtSock.size() > 0) { + std::cout << "Press any key to stop the server." << std::endl; + std::cin.get(); Msg::Exit(0); } #endif diff --git a/Common/GmshMessage.cpp b/Common/GmshMessage.cpp index 79d4ece02da64efc8a56e5d926a20d505770a5b3..6e198e1f87bfc7d8a0c424aae0995f94566a174b 100644 --- a/Common/GmshMessage.cpp +++ b/Common/GmshMessage.cpp @@ -906,6 +906,12 @@ void Msg::InitializeOnelab(const std::string &name, const std::string &sockname) Error("Unable to connect ONELAB server (%s)", sockname.c_str()); Exit(1); } +#if defined(HAVE_FLTK) + else if(FlGui::available()) // FIXME + c->setCallback(FlGui::instance()->onelab); + else + Warning("FlGUI not available"); +#endif _onelabClient = OnelabDatabase::instance(); SetOnelabNumber(name + "/UseCommandLine", 1, false); @@ -946,7 +952,7 @@ void Msg::InitializeOnelab(const std::string &name, const std::string &sockname) std::vector<onelab::string> ps; _onelabClient->get(ps, name + "/Action"); if(ps.size()){ - //Info("Performing ONELAB '%s'", ps[0].getValue().c_str()); + Info("Performing ONELAB '%s'", ps[0].getValue().c_str()); if(ps[0].getValue() == "initialize") Exit(0); } } diff --git a/Common/OS.cpp b/Common/OS.cpp index 8bba8ce5796f55a152cdff75e9ce064e13492667..666101d70cbac867616bf0e5dc8b1e17d222bf17 100644 --- a/Common/OS.cpp +++ b/Common/OS.cpp @@ -14,6 +14,7 @@ #include <signal.h> #include <time.h> #include <math.h> +#include "FlGui.h" #include "GmshConfig.h" #include "StringUtils.h" #include "Context.h" @@ -575,7 +576,13 @@ int SystemCallExe(const std::string &exe, const std::string &argsOrCommand, return 1; } if(!blocking) cmd += " &"; +#if defined(HAVE_FLTK) + FlGui::instance()->lock(); +#endif Msg::Info("Calling '%s'", cmd.c_str()); +#if defined(HAVE_FLTK) + FlGui::instance()->unlock(); +#endif if(!system(cmd.c_str())) return 1; #endif return 0;