Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- beast::http::response<beast::http::vector_body<uint8_t>> GetErrorResponce(std::string reason)
- {
- std::string ss = "Error reason: " + reason + "[9]";
- std::vector<uint8_t> ret(ss.begin(), ss.end());
- beast::http::response<beast::http::vector_body<uint8_t>> resp{beast::http::status::ok, 11};
- resp.keep_alive(true);
- resp.set(boost::beast::http::field::content_type, "application/octet-stream");
- resp.body() = std::move(ret);
- resp.prepare_payload();
- return resp;
- }
- class ServLoader
- {
- private:
- public:
- ServLoader(asio::ip::tcp::endpoint epoint, DictionaryMode mode) : epoint_(std::move(epoint))
- {
- MakeAcceptor();
- MakeStorage(mode);
- }
- СТАРТ СЕРВЕРА!!!!
- void StartServer()
- {
- std::wcout << L"Acceptor Waiting" << std::endl;
- assert(acceptor_ != nullptr);
- acceptor_->async_accept( asio::make_strand(ioc_) ,[this](boost::system::error_code ec, tcp::socket socket)
- { HandleSocket(std::move(socket));
- StartServer(); });
- ioc_.run();
- };
- private:
- void MakeAcceptor()
- {
- !!!СОЗДАЕМ АКЦЕПТОР
- try
- {
- acceptor_ = std::make_shared<tcp::acceptor>(strand_ , epoint_);
- acceptor_->listen(asio::socket_base::max_listen_connections);
- }
- catch (const std::exception &ex)
- {
- std::wcout << L"Excepion in making Acceptor: " << ex.what() << std::endl;
- abort();
- }
- }
- void HandleSocket(tcp::socket socket)
- {
- try
- {
- beast::flat_buffer sbuffer;
- beast::http::request<beast::http::vector_body<uint8_t>> req2;
- beast::error_code ec;
- beast::http::read(socket, sbuffer, req2, ec);
- if (ec)
- {
- beast::http::write(socket, GetErrorResponce("Reading socket " + ec.message()));
- return;
- };
- // std::thread hsocket(MakeResponse, this, std::move(req2), std::move(socket));
- // hsocket.join();
- MakeResponse(std::move(req2), std::move(socket));
- }
- catch (const std::exception &ex)
- {
- try
- {
- beast::http::write(socket, GetErrorResponce(ex.what()));
- // socket.close();
- }
- catch (const std::exception &ex)
- {
- std::wcout << ToWstr(ex.what()) << std::endl;
- }
- }
- }
- void MakeResponse(http::request<req_body> req, tcp::socket socket)
- {
- // Ожидаемо нижестоящее приходит
- beast::http::write(socket, GetErrorResponce("Unknown Action Command"));
- return;
- }
- std::shared_ptr<LanguageStorage> storage_;
- std::shared_ptr<tcp::acceptor> acceptor_ = nullptr;
- asio::io_context ioc_;
- asio::strand<asio::io_context::executor_type> strand_{asio::make_strand(ioc_)};
- asio::ip::tcp::endpoint epoint_;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement