Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- В Run() мы фактически запускаем синхронно Read, A в Write уже синхронная запись идет, а насколько я помню, при синхронном выполнении операции рабочий екзекутор не нужен... поэтому в Write если запрос на запрись пришел с другой стороны, сделать stream->cancel()..
- записать все что нужно, и если запрос был изнутри, то в OnWrite вызвать снова Read(), А если запрос был снаружи то вызвать Run(), так как была отмена всех операций на стриме...
- Просто я не знаю если взведенная асинк-рид стоит, можно ли в этот момент что-то писать в сокет... или надо вызвать отмену асинхронного ожидания, записать что нужно и снова запустить..
- void AbstractSession::Run()
- {
- net::dispatch(stream_->get_executor(),
- beast::bind_front_handler(
- &AbstractSession::Read,
- shared_from_this()));
- };
- void AbstractSession::Write(DIR dir,std::string responce_body, http::status status)
- { std::lock_guard<std::mutex> lg(mtx_use_write_);
- if(dir == OUTER){ stream -> cancel() } ????? //если запрос пришел из вне
- OnWrite(dir, true, ec, bytes);
- }
- void AbstractSession::OnWrite(DIR dir, bool keep_alive, beast::error_code ec, std::size_t bytes_transferred)
- {
- if(dir == AbstractSession::DIR::OUTER) {Run();} //Если была отмена операций на стриме
- else{ Read();};
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement