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

onelab2

parent 777465d7
No related branches found
No related tags found
No related merge requests found
......@@ -521,17 +521,17 @@ endif(ENABLE_NATIVE_FILE_CHOOSER)
if(ENABLE_ONELAB2)
if(ENABLE_UDT)
set_config_option(HAVE_UDT "UDT")
find_package(Threads REQUIRED)
find_path(UDT_INCLUDE_DIR NAMES udt.h PATH_SUFFIXES udt/)
find_library(UDT_LIBRARY NAMES udt)
if(UDT_INCLUDE_DIR AND UDT_LIBRARY AND CMAKE_THREAD_LIBS_INIT)
find_path(UDT_INCLUDE_DIR "udt.h" PATH_SUFFIXES include udt)
find_library(UDT_LIBRARY udt)
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 ${UDT_LIBRARY})
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")
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)
set_config_option(HAVE_ONELAB2 "ONELAB2")
set(GMSH_SRC ${GMSH_SRC};Fltk/onelab2Group.cpp;Fltk/onelab2Group.h)
......
......@@ -12,15 +12,15 @@ append_gmsh_src(contrib/onelab2 "${SRC};${HDR}")
# build only the server
if(HAVE_UDT)
find_package(Threads REQUIRED)
find_path(UDT_INCLUDE_DIR NAMES udt.h PATH_SUFFIXES udt/)
find_library(UDT_LIBRARY NAMES udt)
if(UDT_INCLUDE_DIR AND UDT_LIBRARY AND CMAKE_THREAD_LIBS_INIT)
find_path(UDT_INCLUDE_DIR udt.h PATH_SUFFIXES include udt)
find_library(UDT_LIBRARY udt)
if(UDT_INCLUDE_DIR AND UDT_LIBRARY AND Threads_FOUND)
list(APPEND EXTERNAL_INCLUDES ${UDT_INCLUDE_DIR})
list(APPEND EXTERNAL_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
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")
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)
include_directories(${CMAKE_SOURCE_DIR}/Common/) # for onelab.h
......
......@@ -58,6 +58,7 @@ public:
//OnelabServer::instance(0, 0);
_localClient = new GmshLocalClient("localGUI", OnelabServer::instance()->getParameterSpace());
OnelabServer::instance()->addClient(_localClient); // TODO remove from server in _clear()
#ifndef WIN32
pthread_create(&_serverThread, NULL, OnelabDatabase_server, NULL);
#else
......
......@@ -95,8 +95,12 @@ bool OnelabNetworkClient::connect()
OnelabProtocol msg(OnelabProtocol::OnelabStart);
if(_connected) return true;
#ifdef HAVE_UDT
if(_fds) ip4_socket_connect(_fds, _ip);
else udt_socket_connect(_fdu, _ip);
if(_fds) {
ip4_socket_connect(_fds, _ip);
}
else{
udt_socket_connect(_fdu, _ip);
}
#else
ip4_socket_connect(_fds, _ip);
#endif
......@@ -106,8 +110,9 @@ bool OnelabNetworkClient::connect()
#ifdef HAVE_UDT
udt_socket_timeout(_fdu, 3);
#endif
ip4_socket_timeout(_fds, 3);
//ip4_socket_timeout(_fds, 3);
recvlen = recvfrom(buff, bufflen);
#ifdef HAVE_UDT
udt_socket_timeout(_fdu, -1);
#endif
......@@ -117,6 +122,7 @@ bool OnelabNetworkClient::connect()
if(recvlen > 0 && msg.msgType() == OnelabProtocol::OnelabStart) _connected = true;
return _connected;
}
void OnelabNetworkClient::disconnect()
{
// Send a message to the server to say the client stop (the server have to reply)
......@@ -128,6 +134,7 @@ void OnelabNetworkClient::disconnect()
this->sendto(buff, recvlen);
_connected = false;
}
void OnelabNetworkClient::request(OnelabProtocol &msg)
{
UInt16 bufflen = 1024, recvlen = 0;
......@@ -135,6 +142,7 @@ void OnelabNetworkClient::request(OnelabProtocol &msg)
recvlen = msg.encodeMsg(buff, bufflen);
this->sendto(buff, recvlen);
}
void OnelabNetworkClient::requestParameters()
{
OnelabProtocol msg(OnelabProtocol::OnelabRequest);
......
......@@ -32,6 +32,7 @@ OnelabServer::OnelabServer(UInt32 iface, UInt16 port)
_fds = ip4_socket(_ip, SOCK_STREAM);
ip4_socket_ip(_fds, _ip);
}
OnelabServer::OnelabServer(UInt16 port)
{
_ip.address = 0;
......@@ -44,11 +45,13 @@ OnelabServer::OnelabServer(UInt16 port)
_fds = ip4_socket(_ip, SOCK_STREAM);
ip4_socket_ip(_fds, _ip);
}
#ifdef HAVE_UDT
void OnelabServer::addClient(std::string name, UDTSOCKET fd, UInt32 ip, UInt16 port)
{
this->_clients.push_back(OnelabLocalNetworkClient(name, fd, ip, port));
}
OnelabLocalNetworkClient *OnelabServer::getClient(UDTSOCKET fd) // UDTSOCKET Socket
{
for(std::vector<OnelabLocalNetworkClient>::iterator it = _clients.begin(); it != _clients.end(); ++it) {
......@@ -58,6 +61,7 @@ OnelabLocalNetworkClient *OnelabServer::getClient(UDTSOCKET fd) // UDTSOCKET Soc
return NULL;
}
#endif
//void OnelabServer::addClient(std::string name, Socket fd, UInt32 ip, UInt16 port)
//{
// if(ip == 0 || port == 0) throw "Unable to add client (invalid ip or port)";
......@@ -78,6 +82,7 @@ void OnelabServer::sendto(std::string client, UInt8 *buff, UInt32 len)
return;
}
}
OnelabLocalNetworkClient *OnelabServer::getClient(UInt32 ip, UInt16 port)
{
for(std::vector<OnelabLocalNetworkClient>::iterator it = _clients.begin(); it != _clients.end(); ++it) {
......@@ -86,6 +91,7 @@ OnelabLocalNetworkClient *OnelabServer::getClient(UInt32 ip, UInt16 port)
}
return NULL;
}
OnelabLocalNetworkClient *OnelabServer::getClient(std::string name)
{
for(std::vector<OnelabLocalNetworkClient>::iterator it = _clients.begin(); it != _clients.end(); ++it) {
......@@ -94,6 +100,7 @@ OnelabLocalNetworkClient *OnelabServer::getClient(std::string name)
}
return NULL;
}
void OnelabServer::removeClient(OnelabLocalNetworkClient *client)
{
for(std::vector<OnelabLocalNetworkClient>::iterator it = _clients.begin(); it != _clients.end(); ++it) {
......@@ -103,6 +110,7 @@ void OnelabServer::removeClient(OnelabLocalNetworkClient *client)
}
}
}
#ifdef HAVE_UDT
#ifndef WIN32
void *listenOnClients(void *param)
......@@ -120,7 +128,9 @@ DWORD WINAPI listenOnClients(LPVOID param)
int eid = OnelabServer::instance()->getEID();
while(UDT::ERROR != UDT::epoll_wait(eid, &fdus, NULL, -1, &fdss, NULL)) {
//for(std::set<UDTSOCKET>::iterator it = fdus.begin(); it != fdus.end(); ++it) {
for(std::set<Socket>::iterator it = fdss.begin(); it != fdss.end(); ++it) {
OnelabLocalNetworkClient *cli = OnelabServer::instance()->getClient(*it);
if(cli == NULL) {
IPv4 ip;
......@@ -315,6 +325,7 @@ DWORD WINAPI listenOnClients(LPVOID param)
}
}
#endif
void OnelabServer::sendAllParameter(OnelabLocalNetworkClient *cli)
{
std::set<onelab::parameter*, onelab::parameterLessThan> ps;
......@@ -327,6 +338,7 @@ void OnelabServer::sendAllParameter(OnelabLocalNetworkClient *cli)
recvlen = msg.encodeMsg(buff, bufflen);
cli->sendto(buff, recvlen);
}
void OnelabServer::Run()
{
UInt32 bufflen = 1024, recvlen = 0;
......@@ -350,6 +362,7 @@ void OnelabServer::Run()
std::clog << "listen on " << ip4_inet_ntop(_ip.address) << ":" << _ip.port << "(tcp)" << std::endl;
// << "listen on " << ip4_inet_ntop(_ip.address) << ":" << _ip.port << "(udp/udt)" << std::endl;
//while(newcli = udt_socket_accept(_fdu, ip)) { // TODO accept udt and tcp ?
while(newcli = ip4_socket_accept(_fds, ip)) {
std::clog << "\033[0;31m" << "accpet peer : " << ip4_inet_ntop(ip.address)<< ':' << ip.port << "\033[0m" << std::endl;
//UDT::epoll_add_usock(_eid, newcli);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment