|
|
|
|
|
|
|
|
|
|
|
|
|
#include <boost/shared_ptr.hpp> |
|
#include "Translator.h" |
|
#include "TranslationRequest.h" |
|
#include "Server.h" |
|
#include "../parameters/ServerOptions.h" |
|
|
|
using namespace std; |
|
|
|
namespace Moses2 |
|
{ |
|
|
|
Translator::Translator(Server& server, System &system) |
|
: m_server(server), |
|
m_threadPool(server.options().numThreads), |
|
m_system(system), |
|
m_translationId(0) |
|
{ |
|
|
|
|
|
|
|
this->_signature = "S:S"; |
|
this->_help = "Does translation"; |
|
} |
|
|
|
Translator::~Translator() |
|
{ |
|
|
|
} |
|
|
|
void Translator::execute(xmlrpc_c::paramList const& paramList, |
|
xmlrpc_c::value *const retvalP) |
|
{ |
|
typedef std::map<std::string,xmlrpc_c::value> param_t; |
|
param_t const& params = paramList.getStruct(0); |
|
param_t::const_iterator si; |
|
si = params.find("text"); |
|
if (si == params.end()) { |
|
throw xmlrpc_c::fault("Missing source text", xmlrpc_c::fault::CODE_PARSE); |
|
} |
|
|
|
string line = xmlrpc_c::value_string(si->second); |
|
long translationId; |
|
|
|
|
|
{ |
|
boost::unique_lock<boost::shared_mutex> lock(m_accessLock); |
|
translationId = m_translationId++; |
|
} |
|
|
|
boost::condition_variable cond; |
|
boost::mutex mut; |
|
boost::shared_ptr<TranslationRequest> task; |
|
task = TranslationRequest::create(this, paramList,cond,mut, m_system, line, translationId); |
|
m_threadPool.Submit(task); |
|
boost::unique_lock<boost::mutex> lock(mut); |
|
while (!task->IsDone()) { |
|
cond.wait(lock); |
|
} |
|
*retvalP = xmlrpc_c::value_struct(task->GetRetData()); |
|
} |
|
|
|
} |
|
|