|
|
|
|
|
|
|
|
|
|
|
|
|
#include <iostream> |
|
#include "../System.h" |
|
#include "Server.h" |
|
#include "Translator.h" |
|
#include "../parameters/ServerOptions.h" |
|
|
|
using namespace std; |
|
|
|
namespace Moses2 |
|
{ |
|
|
|
Server::Server(ServerOptions &server_options, System &system) |
|
:m_server_options(server_options) |
|
,m_translator(new Translator(*this, system)) |
|
{ |
|
m_registry.addMethod("translate", m_translator); |
|
} |
|
|
|
Server::~Server() |
|
{ |
|
unlink(m_pidfile.c_str()); |
|
} |
|
|
|
void Server::run(System &system) |
|
{ |
|
xmlrpc_c::serverAbyss myAbyssServer |
|
(xmlrpc_c::serverAbyss::constrOpt() |
|
.registryP(&m_registry) |
|
.portNumber(m_server_options.port) |
|
.logFileName(m_server_options.logfile) |
|
.allowOrigin("*") |
|
.maxConn(m_server_options.maxConn) |
|
.maxConnBacklog(m_server_options.maxConnBacklog) |
|
.keepaliveTimeout(m_server_options.keepaliveTimeout) |
|
.keepaliveMaxConn(m_server_options.keepaliveMaxConn) |
|
.timeout(m_server_options.timeout) |
|
); |
|
std::ostringstream pidfilename; |
|
pidfilename << "/tmp/moses-server." << m_server_options.port << ".pid"; |
|
m_pidfile = pidfilename.str(); |
|
std::ofstream pidfile(m_pidfile.c_str()); |
|
|
|
#ifdef _WIN32 |
|
int thePid = GetCurrentProcessId(); |
|
#else |
|
int thePid = getpid(); |
|
#endif |
|
pidfile << thePid << std::endl; |
|
pidfile.close(); |
|
cerr << "Listening on port " << m_server_options.port << std::endl; |
|
if (m_server_options.is_serial) { |
|
cerr << "Running server in serial mode." << std::endl; |
|
while(true) myAbyssServer.runOnce(); |
|
} else myAbyssServer.run(); |
|
|
|
std::cerr << "xmlrpc_c::serverAbyss.run() returned but it should not." |
|
<< std::endl; |
|
} |
|
|
|
ServerOptions const&Server::options() const |
|
{ |
|
return m_server_options; |
|
} |
|
|
|
|
|
} |
|
|