|
|
|
#include "Server.h" |
|
#include <sstream> |
|
|
|
namespace MosesServer |
|
{ |
|
Server:: |
|
Server(Moses::Parameter& params) |
|
: m_server_options(params), |
|
m_updater(new Updater), |
|
m_optimizer(new Optimizer), |
|
m_translator(new Translator(*this)), |
|
m_close_session(new CloseSession(*this)) |
|
{ |
|
m_registry.addMethod("translate", m_translator); |
|
m_registry.addMethod("updater", m_updater); |
|
m_registry.addMethod("optimize", m_optimizer); |
|
m_registry.addMethod("close_session", m_close_session); |
|
} |
|
|
|
Server:: |
|
~Server() |
|
{ |
|
unlink(m_pidfile.c_str()); |
|
} |
|
|
|
int |
|
Server:: |
|
run() |
|
{ |
|
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()); |
|
pidfile << getpid() << std::endl; |
|
pidfile.close(); |
|
XVERBOSE(1,"Listening on port " << m_server_options.port << std::endl); |
|
if (m_server_options.is_serial) |
|
{ |
|
VERBOSE(1,"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; |
|
return 1; |
|
} |
|
|
|
Moses::ServerOptions const& |
|
Server:: |
|
options() const |
|
{ |
|
return m_server_options; |
|
} |
|
|
|
Session const& |
|
Server:: |
|
get_session(uint64_t session_id) |
|
{ |
|
return m_session_cache[session_id]; |
|
} |
|
|
|
void |
|
Server:: |
|
delete_session(uint64_t const session_id) |
|
{ |
|
return m_session_cache.erase(session_id); |
|
} |
|
} |
|
|