Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/moses2/server/Translator.cpp')
-rw-r--r--contrib/moses2/server/Translator.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/contrib/moses2/server/Translator.cpp b/contrib/moses2/server/Translator.cpp
new file mode 100644
index 000000000..fd855c136
--- /dev/null
+++ b/contrib/moses2/server/Translator.cpp
@@ -0,0 +1,68 @@
+/*
+ * Translator.cpp
+ *
+ * Created on: 1 Apr 2016
+ * Author: hieu
+ */
+#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)
+{
+ // 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";
+}
+
+Translator::~Translator()
+{
+ // TODO Auto-generated destructor stub
+}
+
+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;
+
+ // get unique id. Thread safe
+ {
+ 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());
+}
+
+} /* namespace Moses2 */