Advertisement
AlexNovoross87

Untitled

Apr 27th, 2025
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.13 KB | None | 0 0
  1. beast::http::response<beast::http::vector_body<uint8_t>> GetErrorResponce(std::string reason)
  2. {
  3. std::string ss = "Error reason: " + reason + "[9]";
  4. std::vector<uint8_t> ret(ss.begin(), ss.end());
  5. beast::http::response<beast::http::vector_body<uint8_t>> resp{beast::http::status::ok, 11};
  6. resp.keep_alive(true);
  7. resp.set(boost::beast::http::field::content_type, "application/octet-stream");
  8. resp.body() = std::move(ret);
  9. resp.prepare_payload();
  10. return resp;
  11. }
  12.  
  13. class ServLoader
  14. {
  15. private:
  16.  
  17.  
  18. public:
  19. ServLoader(asio::ip::tcp::endpoint epoint, DictionaryMode mode) : epoint_(std::move(epoint))
  20. {
  21. MakeAcceptor();
  22. MakeStorage(mode);
  23. }
  24.  
  25. СТАРТ СЕРВЕРА!!!!
  26. void StartServer()
  27. {
  28. std::wcout << L"Acceptor Waiting" << std::endl;
  29. assert(acceptor_ != nullptr);
  30. acceptor_->async_accept( asio::make_strand(ioc_) ,[this](boost::system::error_code ec, tcp::socket socket)
  31. { HandleSocket(std::move(socket));
  32. StartServer(); });
  33. ioc_.run();
  34. };
  35.  
  36. private:
  37.  
  38. void MakeAcceptor()
  39. {
  40. !!!СОЗДАЕМ АКЦЕПТОР
  41.  
  42. try
  43. {
  44. acceptor_ = std::make_shared<tcp::acceptor>(strand_ , epoint_);
  45. acceptor_->listen(asio::socket_base::max_listen_connections);
  46. }
  47. catch (const std::exception &ex)
  48. {
  49. std::wcout << L"Excepion in making Acceptor: " << ex.what() << std::endl;
  50. abort();
  51. }
  52. }
  53.  
  54.  
  55.  
  56. void HandleSocket(tcp::socket socket)
  57. {
  58.  
  59. try
  60. {
  61. beast::flat_buffer sbuffer;
  62. beast::http::request<beast::http::vector_body<uint8_t>> req2;
  63. beast::error_code ec;
  64. beast::http::read(socket, sbuffer, req2, ec);
  65.  
  66. if (ec)
  67. {
  68. beast::http::write(socket, GetErrorResponce("Reading socket " + ec.message()));
  69. return;
  70. };
  71.  
  72. // std::thread hsocket(MakeResponse, this, std::move(req2), std::move(socket));
  73. // hsocket.join();
  74. MakeResponse(std::move(req2), std::move(socket));
  75.  
  76. }
  77. catch (const std::exception &ex)
  78. {
  79. try
  80. {
  81. beast::http::write(socket, GetErrorResponce(ex.what()));
  82. // socket.close();
  83. }
  84. catch (const std::exception &ex)
  85. {
  86. std::wcout << ToWstr(ex.what()) << std::endl;
  87. }
  88. }
  89. }
  90.  
  91. void MakeResponse(http::request<req_body> req, tcp::socket socket)
  92. {
  93.  
  94. // Ожидаемо нижестоящее приходит
  95. beast::http::write(socket, GetErrorResponce("Unknown Action Command"));
  96.  
  97. return;
  98. }
  99. std::shared_ptr<LanguageStorage> storage_;
  100. std::shared_ptr<tcp::acceptor> acceptor_ = nullptr;
  101. asio::io_context ioc_;
  102. asio::strand<asio::io_context::executor_type> strand_{asio::make_strand(ioc_)};
  103. asio::ip::tcp::endpoint epoint_;
  104. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement