mosesdecoder/moses/server/Translator.cpp

49 lines
1.1 KiB
C++
Raw Permalink Normal View History

// -*- mode: c++; indent-tabs-mode: nil; tab-width:2 -*-
#include "Translator.h"
#include "TranslationRequest.h"
#include "Server.h"
namespace MosesServer
{
2015-05-02 13:45:24 +03:00
using namespace std;
using namespace Moses;
2015-05-02 13:45:24 +03:00
Translator::
Translator(Server& server)
2015-11-29 20:57:04 +03:00
: m_server(server),
m_threadPool(server.options().numThreads)
2015-05-02 13:45:24 +03:00
{
// signature and help strings are documentation -- the client
// can query this information with a system.methodSignature and
// system.methodHelp RPC.
this->_signature = "S:S";
this->_help = "Does translation";
}
2015-05-02 13:45:24 +03:00
void
Translator::
execute(xmlrpc_c::paramList const& paramList,
xmlrpc_c::value * const retvalP)
{
boost::condition_variable cond;
boost::mutex mut;
boost::shared_ptr<TranslationRequest> task;
task = TranslationRequest::create(this, paramList,cond,mut);
2015-05-02 13:45:24 +03:00
m_threadPool.Submit(task);
boost::unique_lock<boost::mutex> lock(mut);
while (!task->IsDone())
cond.wait(lock);
*retvalP = xmlrpc_c::value_struct(task->GetRetData());
}
Session const&
Translator::
get_session(uint64_t const id)
{
return m_server.get_session(id);
}
}