00001
00002
00003 #include "Translator.h"
00004 #include "TranslationRequest.h"
00005 #include "Server.h"
00006
00007 namespace MosesServer
00008 {
00009
00010 using namespace std;
00011 using namespace Moses;
00012
00013 Translator::
00014 Translator(Server& server)
00015 : m_server(server),
00016 m_threadPool(server.options().numThreads)
00017 {
00018
00019
00020
00021 this->_signature = "S:S";
00022 this->_help = "Does translation";
00023 }
00024
00025 void
00026 Translator::
00027 execute(xmlrpc_c::paramList const& paramList,
00028 xmlrpc_c::value * const retvalP)
00029 {
00030 boost::condition_variable cond;
00031 boost::mutex mut;
00032 boost::shared_ptr<TranslationRequest> task;
00033 task = TranslationRequest::create(this, paramList,cond,mut);
00034 m_threadPool.Submit(task);
00035 boost::unique_lock<boost::mutex> lock(mut);
00036 while (!task->IsDone())
00037 cond.wait(lock);
00038 *retvalP = xmlrpc_c::value_struct(task->GetRetData());
00039 }
00040
00041 Session const&
00042 Translator::
00043 get_session(uint64_t const id)
00044 {
00045 return m_server.get_session(id);
00046 }
00047
00048 }