.. _program_listing_file_src_command_marian_server.cpp: Program Listing for File marian_server.cpp ========================================== |exhale_lsh| :ref:`Return to documentation for file ` (``src/command/marian_server.cpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include "marian.h" #include "translator/beam_search.h" #include "translator/translator.h" #include "common/timer.h" #include "common/utils.h" #include "3rd_party/simple-websocket-server/server_ws.hpp" typedef SimpleWeb::SocketServer WSServer; int main(int argc, char **argv) { using namespace marian; // Initialize translation task auto options = parseOptions(argc, argv, cli::mode::server, true); auto task = New>(options); auto quiet = options->get("quiet-translation"); // Initialize web server WSServer server; server.config.port = (short)options->get("port", 8080); auto &translate = server.endpoint["^/translate/?$"]; translate.on_message = [&task, quiet](Ptr connection, Ptr message) { // Get input text auto inputText = message->string(); auto sendStream = std::make_shared(); // Translate timer::Timer timer; auto outputText = task->run(inputText); *sendStream << outputText << std::endl; if(!quiet) LOG(info, "Translation took: {:.5f}s", timer.elapsed()); // Send translation back connection->send(sendStream, [](const SimpleWeb::error_code &ec) { if(ec) LOG(error, "Error sending message: ({}) {}", ec.value(), ec.message()); }); }; // Error Codes for error code meanings // http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference.html translate.on_error = [](Ptr /*connection*/, const SimpleWeb::error_code &ec) { LOG(error, "Connection error: ({}) {}", ec.value(), ec.message()); }; // Start server thread std::thread serverThread([&server]() { server.start([](unsigned short port) { LOG(info, "Server is listening on port {}", port); }); }); serverThread.join(); return 0; }