diff --git a/Common/onelab.h b/Common/onelab.h index 2ea399228191c758a55af62bd3c954107ed7445f..38799eebdf6552ed43111ceadca3cba0e0e8aba5 100644 --- a/Common/onelab.h +++ b/Common/onelab.h @@ -522,7 +522,7 @@ namespace onelab{ _gmshClient->Error("Did not receive message header: aborting remote get"); return false; } - std::string msg(length); + std::string msg(length, ' '); if(!_gmshClient->ReceiveMessage(length, &msg[0])){ _gmshClient->Error("Did not receive message body: aborting remote get"); return false; diff --git a/Fltk/onelabWindow.cpp b/Fltk/onelabWindow.cpp index 0d5991cc09be00301505fe9f2e1597847642839a..1cf8a3467e04476fa720a9bda846fc917b769006 100644 --- a/Fltk/onelabWindow.cpp +++ b/Fltk/onelabWindow.cpp @@ -7,8 +7,12 @@ #include "GmshMessage.h" #include "Context.h" #include "OS.h" +#include "OpenFile.h" +#include "drawContext.h" +#include "PView.h" #include "FlGui.h" #include "paletteWindow.h" +#include "menuWindow.h" #include "onelabWindow.h" // This file contains the Gmsh/FLTK specific parts of the ONELAB @@ -98,41 +102,52 @@ bool onelab::localNetworkClient::run(const std::string &what) double timer = GetTimeInSeconds(); - char *message = new char[length + 1]; - if(!server->ReceiveString(length, message)){ + std::string message(length, ' '); + if(!server->ReceiveMessage(length, &message[0])){ Msg::Error("Did not receive message body: stopping server"); - delete [] message; break; } switch (type) { case GmshSocket::GMSH_START: - _pid = atoi(message); + _pid = atoi(message.c_str()); break; case GmshSocket::GMSH_STOP: _pid = -1; break; case GmshSocket::GMSH_ONELAB_PARAM: - printf("server: got onelab param!\n"); + printf("server: got onelab param %s!\n", message.c_str()); break; case GmshSocket::GMSH_PROGRESS: - Msg::StatusBar(2, false, "%s %s", _name.c_str(), message); + Msg::StatusBar(2, false, "%s %s", _name.c_str(), message.c_str()); break; case GmshSocket::GMSH_INFO: - Msg::Direct("%-8.8s: %s", _name.c_str(), message); + Msg::Direct("%-8.8s: %s", _name.c_str(), message.c_str()); break; case GmshSocket::GMSH_WARNING: - Msg::Direct(2, "%-8.8s: %s", _name.c_str(), message); + Msg::Direct(2, "%-8.8s: %s", _name.c_str(), message.c_str()); break; case GmshSocket::GMSH_ERROR: - Msg::Direct(1, "%-8.8s: %s", _name.c_str(), message); + Msg::Direct(1, "%-8.8s: %s", _name.c_str(), message.c_str()); + break; + case GmshSocket::GMSH_MERGE_FILE: + { + int n = PView::list.size(); + MergeFile(message); + drawContext::global()->draw(); + if(n != (int)PView::list.size()) + FlGui::instance()->menu->setContext(menu_post, 0); + } + break; + case GmshSocket::GMSH_PARSE_STRING: + ParseString(message); + drawContext::global()->draw(); break; default: Msg::Warning("Received unknown message type (%d)", type); break; } - delete [] message; FlGui::instance()->check(); } @@ -140,8 +155,7 @@ bool onelab::localNetworkClient::run(const std::string &what) delete server; Msg::StatusBar(2, true, "Done running '%s'", _name.c_str()); - - return false; + return true; } bool onelab::localNetworkClient::kill() @@ -169,6 +183,17 @@ void onelab_cb(Fl_Widget *w, void *data) FlGui::instance()->onelab->show(); } +void onelab_compute_cb(Fl_Widget *w, void *data) +{ + printf("onelab has %d clients\n", onelab::server::instance()->getNumClients()); + for(onelab::server::citer it = onelab::server::instance()->firstClient(); + it != onelab::server::instance()->lastClient(); it++){ + onelab::client *c = it->second; + printf("client name = %s\n", c->getName().c_str()); + c->run("/Users/geuzaine/src/getdp/demos/test.pro -solve MagSta_phi -pos phi"); + } +} + onelabWindow::onelabWindow(int deltaFontSize) { FL_NORMAL_SIZE -= deltaFontSize; @@ -184,6 +209,7 @@ onelabWindow::onelabWindow(int deltaFontSize) } _run = new Fl_Button(width - WB - BB, height - WB - BH, BB, BH, "Compute"); + _run->callback(onelab_compute_cb); _win->position (CTX::instance()->solverPosition[0], CTX::instance()->solverPosition[1]);