Skip to content
Snippets Groups Projects
Commit a450d601 authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

onelab2

parent 777465d7
Branches
Tags
No related merge requests found
...@@ -521,17 +521,17 @@ endif(ENABLE_NATIVE_FILE_CHOOSER) ...@@ -521,17 +521,17 @@ endif(ENABLE_NATIVE_FILE_CHOOSER)
if(ENABLE_ONELAB2) if(ENABLE_ONELAB2)
if(ENABLE_UDT) if(ENABLE_UDT)
set_config_option(HAVE_UDT "UDT")
find_package(Threads REQUIRED) find_package(Threads REQUIRED)
find_path(UDT_INCLUDE_DIR NAMES udt.h PATH_SUFFIXES udt/) find_path(UDT_INCLUDE_DIR "udt.h" PATH_SUFFIXES include udt)
find_library(UDT_LIBRARY NAMES udt) find_library(UDT_LIBRARY udt)
if(UDT_INCLUDE_DIR AND UDT_LIBRARY AND CMAKE_THREAD_LIBS_INIT) if(UDT_INCLUDE_DIR AND UDT_LIBRARY AND Threads_FOUND)
set_config_option(HAVE_UDT "UDT")
list(APPEND EXTERNAL_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) list(APPEND EXTERNAL_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
list(APPEND EXTERNAL_LIBRARIES ${UDT_LIBRARY}) list(APPEND EXTERNAL_LIBRARIES ${UDT_LIBRARY})
list(APPEND EXTERNAL_INCLUDES ${UDT_INCLUDE_DIR}) list(APPEND EXTERNAL_INCLUDES ${UDT_INCLUDE_DIR})
else(UDT_INCLUDE_DIR AND UDT_LIBRARY AND CMAKE_THREAD_LIBS_INIT) else(UDT_INCLUDE_DIR AND UDT_LIBRARY AND Threads_FOUND)
message(FATAL_ERROR "Unable to find UDT library") message(FATAL_ERROR "Unable to find UDT library")
endif(UDT_INCLUDE_DIR AND UDT_LIBRARY AND CMAKE_THREAD_LIBS_INIT) endif(UDT_INCLUDE_DIR AND UDT_LIBRARY AND Threads_FOUND)
endif(ENABLE_UDT) endif(ENABLE_UDT)
set_config_option(HAVE_ONELAB2 "ONELAB2") set_config_option(HAVE_ONELAB2 "ONELAB2")
set(GMSH_SRC ${GMSH_SRC};Fltk/onelab2Group.cpp;Fltk/onelab2Group.h) set(GMSH_SRC ${GMSH_SRC};Fltk/onelab2Group.cpp;Fltk/onelab2Group.h)
......
...@@ -12,15 +12,15 @@ append_gmsh_src(contrib/onelab2 "${SRC};${HDR}") ...@@ -12,15 +12,15 @@ append_gmsh_src(contrib/onelab2 "${SRC};${HDR}")
# build only the server # build only the server
if(HAVE_UDT) if(HAVE_UDT)
find_package(Threads REQUIRED) find_package(Threads REQUIRED)
find_path(UDT_INCLUDE_DIR NAMES udt.h PATH_SUFFIXES udt/) find_path(UDT_INCLUDE_DIR udt.h PATH_SUFFIXES include udt)
find_library(UDT_LIBRARY NAMES udt) find_library(UDT_LIBRARY udt)
if(UDT_INCLUDE_DIR AND UDT_LIBRARY AND CMAKE_THREAD_LIBS_INIT) if(UDT_INCLUDE_DIR AND UDT_LIBRARY AND Threads_FOUND)
list(APPEND EXTERNAL_INCLUDES ${UDT_INCLUDE_DIR}) list(APPEND EXTERNAL_INCLUDES ${UDT_INCLUDE_DIR})
list(APPEND EXTERNAL_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) list(APPEND EXTERNAL_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
list(APPEND EXTERNAL_LIBRARIES ${UDT_LIBRARY}) list(APPEND EXTERNAL_LIBRARIES ${UDT_LIBRARY})
else(UDT_INCLUDE_DIR AND UDT_LIBRARY AND CMAKE_THREAD_LIBS_INIT) else(UDT_INCLUDE_DIR AND UDT_LIBRARY AND Threads_FOUND)
message(FATAL_ERROR "Unable to find UDT library") message(FATAL_ERROR "Unable to find UDT library")
endif(UDT_INCLUDE_DIR AND UDT_LIBRARY AND CMAKE_THREAD_LIBS_INIT) endif(UDT_INCLUDE_DIR AND UDT_LIBRARY AND Threads_FOUND)
endif(HAVE_UDT) endif(HAVE_UDT)
include_directories(${CMAKE_SOURCE_DIR}/Common/) # for onelab.h include_directories(${CMAKE_SOURCE_DIR}/Common/) # for onelab.h
......
...@@ -58,6 +58,7 @@ public: ...@@ -58,6 +58,7 @@ public:
//OnelabServer::instance(0, 0); //OnelabServer::instance(0, 0);
_localClient = new GmshLocalClient("localGUI", OnelabServer::instance()->getParameterSpace()); _localClient = new GmshLocalClient("localGUI", OnelabServer::instance()->getParameterSpace());
OnelabServer::instance()->addClient(_localClient); // TODO remove from server in _clear() OnelabServer::instance()->addClient(_localClient); // TODO remove from server in _clear()
#ifndef WIN32 #ifndef WIN32
pthread_create(&_serverThread, NULL, OnelabDatabase_server, NULL); pthread_create(&_serverThread, NULL, OnelabDatabase_server, NULL);
#else #else
...@@ -114,12 +115,12 @@ public: ...@@ -114,12 +115,12 @@ public:
if(_client) return _client->get(ps, name); if(_client) return _client->get(ps, name);
//if(_localClient) _localClient->get(ps, name); //if(_localClient) _localClient->get(ps, name);
return OnelabServer::instance()->get(ps, name, client); return OnelabServer::instance()->get(ps, name, client);
} }
bool fromFile(FILE *fp, const std::string &client="") bool fromFile(FILE *fp, const std::string &client="")
{ {
if(_client) return _client->fromFile(fp, client); if(_client) return _client->fromFile(fp, client);
return OnelabServer::instance()->fromFile(fp, client); return OnelabServer::instance()->fromFile(fp, client);
} }
void onelab_cb(std::string action) { void onelab_cb(std::string action) {
if(_client) return; // TODO send action to the server if(_client) return; // TODO send action to the server
...@@ -138,11 +139,11 @@ public: ...@@ -138,11 +139,11 @@ public:
this->set(o); this->set(o);
(*it).run(); (*it).run();
} }
} while(action == "compute" && } while(action == "compute" &&
//TODO incrementLoops() && //TODO incrementLoops() &&
!false/*TODO onelab->stop*/); !false/*TODO onelab->stop*/);
} }
}; };
...@@ -158,7 +159,7 @@ DWORD WINAPI OnelabDatabase_listen(LPVOID arg) ...@@ -158,7 +159,7 @@ DWORD WINAPI OnelabDatabase_listen(LPVOID arg)
while(1) { while(1) {
recvlen = OnelabDatabase::instance()->listen(buff, 1024); recvlen = OnelabDatabase::instance()->listen(buff, 1024);
if(recvlen == 1 && buff[0] == 'S') if(recvlen == 1 && buff[0] == 'S')
break; break;
msg.parseMsg(buff, recvlen); msg.parseMsg(buff, recvlen);
msg.showMsg(); msg.showMsg();
switch(msg.msgType()) { switch(msg.msgType()) {
......
...@@ -4,139 +4,147 @@ ...@@ -4,139 +4,147 @@
#ifdef HAVE_UDT #ifdef HAVE_UDT
OnelabNetworkClient::OnelabNetworkClient(std::string name, bool UDT) OnelabNetworkClient::OnelabNetworkClient(std::string name, bool UDT)
: VirtualClient(name) : VirtualClient(name)
{ {
_fds = 0; _fds = 0;
_fdu = 0; _fdu = 0;
_ip.address = 0; _ip.address = 0;
_ip.port = 0; _ip.port = 0;
_connected = false; _connected = false;
IPv4 local; IPv4 local;
local.address = 0;// FIXME ip4_default_iface(); local.address = 0;// FIXME ip4_default_iface();
local.port = 0; local.port = 0;
UDT::startup(); UDT::startup();
if(UDT) _fdu = udt_socket(local, SOCK_STREAM); if(UDT) _fdu = udt_socket(local, SOCK_STREAM);
else _fds = ip4_socket(local, SOCK_STREAM); else _fds = ip4_socket(local, SOCK_STREAM);
} }
OnelabNetworkClient::OnelabNetworkClient(std::string name, unsigned int ip, unsigned short port, bool UDT) OnelabNetworkClient::OnelabNetworkClient(std::string name, unsigned int ip, unsigned short port, bool UDT)
: VirtualClient(name) : VirtualClient(name)
{ {
_fds = 0; _fds = 0;
_fdu = 0; _fdu = 0;
_ip.address = ip; _ip.address = ip;
_ip.port = port; _ip.port = port;
_connected = false; _connected = false;
IPv4 local; IPv4 local;
local.address = 0;//ip4_default_iface(); local.address = 0;//ip4_default_iface();
local.port = 0; local.port = 0;
UDT::startup(); UDT::startup();
if(UDT) _fdu = udt_socket(local, SOCK_STREAM); if(UDT) _fdu = udt_socket(local, SOCK_STREAM);
else _fds = ip4_socket(local, SOCK_STREAM); else _fds = ip4_socket(local, SOCK_STREAM);
} }
#else #else
OnelabNetworkClient::OnelabNetworkClient(std::string name) OnelabNetworkClient::OnelabNetworkClient(std::string name)
: VirtualClient(name) : VirtualClient(name)
{ {
_ip.address = 0; _ip.address = 0;
_ip.port = 0; _ip.port = 0;
_connected = false; _connected = false;
IPv4 local; IPv4 local;
local.address = 0;// FIXME ip4_default_iface(); local.address = 0;// FIXME ip4_default_iface();
local.port = 0; local.port = 0;
_fds = ip4_socket(local, SOCK_STREAM); _fds = ip4_socket(local, SOCK_STREAM);
} }
OnelabNetworkClient::OnelabNetworkClient(std::string name, unsigned int ip, unsigned short port) OnelabNetworkClient::OnelabNetworkClient(std::string name, unsigned int ip, unsigned short port)
: VirtualClient(name) : VirtualClient(name)
{ {
_ip.address = ip; _ip.address = ip;
_ip.port = port; _ip.port = port;
_connected = false; _connected = false;
IPv4 local; IPv4 local;
local.address = 0;//ip4_default_iface(); local.address = 0;//ip4_default_iface();
local.port = 0; local.port = 0;
_fds = ip4_socket(local, SOCK_STREAM); _fds = ip4_socket(local, SOCK_STREAM);
} }
#endif #endif
void OnelabNetworkClient::sendto(UInt8 *buff, UInt16 len) void OnelabNetworkClient::sendto(UInt8 *buff, UInt16 len)
{ {
#ifndef HAVE_UDT #ifndef HAVE_UDT
ip4_socket_send(_fds, buff, len, _ip); ip4_socket_send(_fds, buff, len, _ip);
#else #else
if(_fds) ip4_socket_send(_fds, buff, len); if(_fds) ip4_socket_send(_fds, buff, len);
else udt_socket_send(_fdu, buff, len); else udt_socket_send(_fdu, buff, len);
#endif #endif
} }
int OnelabNetworkClient::recvfrom(UInt8 *buff, UInt16 maxlen) int OnelabNetworkClient::recvfrom(UInt8 *buff, UInt16 maxlen)
{ {
IPv4 unused; IPv4 unused;
#ifndef HAVE_UDT #ifndef HAVE_UDT
return ip4_socket_recv(_fds, buff, maxlen, unused); // FIXME check unused == _ip ? return ip4_socket_recv(_fds, buff, maxlen, unused); // FIXME check unused == _ip ?
#else #else
if(_fds) return ip4_socket_recv(_fds, buff, maxlen); // FIXME check unused == _ip ? if(_fds) return ip4_socket_recv(_fds, buff, maxlen); // FIXME check unused == _ip ?
return udt_socket_recv(_fdu, buff, maxlen); return udt_socket_recv(_fdu, buff, maxlen);
#endif #endif
} }
void OnelabNetworkClient::recvfrom(OnelabProtocol &msg) void OnelabNetworkClient::recvfrom(OnelabProtocol &msg)
{ {
UInt16 bufflen = 1024, recvlen = 0; UInt16 bufflen = 1024, recvlen = 0;
UInt8 buff[1024]; UInt8 buff[1024];
recvlen = this->recvfrom(buff, bufflen); recvlen = this->recvfrom(buff, bufflen);
msg.parseMsg(buff, recvlen); msg.parseMsg(buff, recvlen);
} }
bool OnelabNetworkClient::connect() bool OnelabNetworkClient::connect()
{ {
UInt16 bufflen = 1024; UInt16 bufflen = 1024;
int recvlen = 0; int recvlen = 0;
UInt8 buff[1024]; UInt8 buff[1024];
OnelabProtocol msg(OnelabProtocol::OnelabStart); OnelabProtocol msg(OnelabProtocol::OnelabStart);
if(_connected) return true; if(_connected) return true;
#ifdef HAVE_UDT #ifdef HAVE_UDT
if(_fds) ip4_socket_connect(_fds, _ip); if(_fds) {
else udt_socket_connect(_fdu, _ip); ip4_socket_connect(_fds, _ip);
}
else{
udt_socket_connect(_fdu, _ip);
}
#else #else
ip4_socket_connect(_fds, _ip); ip4_socket_connect(_fds, _ip);
#endif #endif
msg.attrs.push_back(new OnelabAttrStart(_name)); msg.attrs.push_back(new OnelabAttrStart(_name));
recvlen = msg.encodeMsg(buff, bufflen); recvlen = msg.encodeMsg(buff, bufflen);
sendto(buff, recvlen); sendto(buff, recvlen);
#ifdef HAVE_UDT #ifdef HAVE_UDT
udt_socket_timeout(_fdu, 3); udt_socket_timeout(_fdu, 3);
#endif #endif
ip4_socket_timeout(_fds, 3); //ip4_socket_timeout(_fds, 3);
recvlen = recvfrom(buff, bufflen); recvlen = recvfrom(buff, bufflen);
#ifdef HAVE_UDT #ifdef HAVE_UDT
udt_socket_timeout(_fdu, -1); udt_socket_timeout(_fdu, -1);
#endif #endif
ip4_socket_timeout(_fds, 0); ip4_socket_timeout(_fds, 0);
if(recvlen <= 0) return false; if(recvlen <= 0) return false;
msg.parseMsg(buff, recvlen); msg.parseMsg(buff, recvlen);
if(recvlen > 0 && msg.msgType() == OnelabProtocol::OnelabStart) _connected = true; if(recvlen > 0 && msg.msgType() == OnelabProtocol::OnelabStart) _connected = true;
return _connected; return _connected;
} }
void OnelabNetworkClient::disconnect() void OnelabNetworkClient::disconnect()
{ {
// Send a message to the server to say the client stop (the server have to reply) // Send a message to the server to say the client stop (the server have to reply)
UInt16 bufflen = 1024, recvlen = 0; UInt16 bufflen = 1024, recvlen = 0;
UInt8 buff[1024]; UInt8 buff[1024];
OnelabProtocol msg(OnelabProtocol::OnelabStop); OnelabProtocol msg(OnelabProtocol::OnelabStop);
if(!_connected) return; if(!_connected) return;
recvlen = msg.encodeMsg(buff, bufflen); recvlen = msg.encodeMsg(buff, bufflen);
this->sendto(buff, recvlen); this->sendto(buff, recvlen);
_connected = false; _connected = false;
} }
void OnelabNetworkClient::request(OnelabProtocol &msg) void OnelabNetworkClient::request(OnelabProtocol &msg)
{ {
UInt16 bufflen = 1024, recvlen = 0; UInt16 bufflen = 1024, recvlen = 0;
UInt8 buff[1024]; UInt8 buff[1024];
recvlen = msg.encodeMsg(buff, bufflen); recvlen = msg.encodeMsg(buff, bufflen);
this->sendto(buff, recvlen); this->sendto(buff, recvlen);
} }
void OnelabNetworkClient::requestParameters() void OnelabNetworkClient::requestParameters()
{ {
OnelabProtocol msg(OnelabProtocol::OnelabRequest); OnelabProtocol msg(OnelabProtocol::OnelabRequest);
this->request(msg); this->request(msg);
} }
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment