...
This commit is contained in:
parent
f215ea7a6d
commit
9818b5f2b8
@ -126,7 +126,7 @@ public:
|
||||
|
||||
if (ctx.use_future) {
|
||||
return _socket.async_connect(
|
||||
endpoint, asio::use_future([&ctx, timer = std::move(timer)](std::error_code ec) { timer->cancel(); }));
|
||||
endpoint, asio::use_future([&ctx, timer = std::move(timer)](std::error_code) { timer->cancel(); }));
|
||||
} else {
|
||||
return _socket.async_connect(endpoint, [&ctx, timer = std::move(timer)](std::error_code ec) {
|
||||
timer->cancel();
|
||||
@ -149,6 +149,9 @@ public:
|
||||
try {
|
||||
acceptor = typename TRANSPORT_PROTOT::acceptor(_ioContext, endpoint);
|
||||
} catch (std::system_error err) {
|
||||
if (ctx.use_future) { // emulation of asio::use_future behaivior?!
|
||||
throw;
|
||||
}
|
||||
ctx.accept_comp_token(err.code());
|
||||
return;
|
||||
}
|
||||
@ -157,7 +160,7 @@ public:
|
||||
|
||||
if (ctx.use_future) {
|
||||
return _socket.async_accept(
|
||||
endpoint, asio::use_future([&ctx, timer = std::move(timer)](std::error_code ec) { timer->cancel(); }));
|
||||
endpoint, asio::use_future([&ctx, timer = std::move(timer)](std::error_code) { timer->cancel(); }));
|
||||
} else {
|
||||
return _socket.async_accept(endpoint, [&ctx, timer = std::move(timer)](std::error_code ec) {
|
||||
timer->cancel();
|
||||
@ -182,15 +185,34 @@ public:
|
||||
},
|
||||
[&ctx, s_res, timer = std::move(timer), this](std::error_code ec, size_t) {
|
||||
timer->cancel();
|
||||
if (ec) {
|
||||
return;
|
||||
R msg;
|
||||
|
||||
if (!ec) {
|
||||
std::string_view net_pack{std::get<0>(*s_res), std::get<1>(*s_res)};
|
||||
|
||||
std::ranges::copy(this->fromProto(net_pack), std::back_inserter(msg));
|
||||
_streamBuffer.consume(net_pack.size());
|
||||
|
||||
while (_streamBuffer.size()) { // search for possible additional session protocol packets
|
||||
auto begin_it = (const char*)traits::asio_streambuff_iter_t::begin(_streamBuffer.data());
|
||||
auto end_it = (const char*)traits::asio_streambuff_iter_t::end(_streamBuffer.data());
|
||||
// static_cast<std::ranges::iterator_t<std::string_view>>(_streamBuffer.data().data());
|
||||
// auto end_it = begin_it + _streamBuffer.data().size();
|
||||
|
||||
|
||||
*s_res = this->search(std::span(begin_it, end_it));
|
||||
if (std::get<2>(*s_res)) {
|
||||
net_pack = std::string_view{std::get<0>(*s_res), std::get<1>(*s_res)};
|
||||
|
||||
std::ranges::copy(this->fromProto(net_pack), std::back_inserter(msg));
|
||||
_streamBuffer.consume(net_pack.size());
|
||||
// TODO: insert to queue
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
R msg;
|
||||
std::string_view net_pack{std::get<0>(*s_res), std::get<1>(*s_res)};
|
||||
|
||||
std::ranges::copy(this->fromProto(net_pack), std::back_inserter(msg));
|
||||
_streamBuffer.consume(net_pack.size());
|
||||
|
||||
ctx.accept_comp_token(ec, std::move(msg));
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user