8 namespace SWC {
namespace Comm {
namespace client {
20 cbp->header.print(out <<
"ReqBase(insistent=" <<
insistent() <<
' ');
39 std::this_thread::yield();
43 std::this_thread::yield();
56 req->handle_no_conn();
74 if(req->queue.get() !=
this)
75 req->queue = shared_from_this();
104 auto tm =
new asio::high_resolution_timer(
m_ioctx->executor());
113 asio::high_resolution_timer* tm;
116 asio::high_resolution_timer* a_tm) noexcept
117 : queue(a_queue), req(std::move(a_req)), tm(a_tm) {
120 TimerTask(TimerTask&& other) noexcept
121 : queue(other.queue), req(std::move(other.req)), tm(other.tm) {
123 TimerTask(
const TimerTask&) =
delete;
124 TimerTask&
operator=(TimerTask&&) =
delete;
125 TimerTask&
operator=(
const TimerTask&) =
delete;
126 ~TimerTask() noexcept { }
127 void operator()(
const asio::error_code& ec) {
128 if(ec == asio::error::operation_aborted) {
129 req->handle_no_conn();
140 tm->async_wait(TimerTask(
this, std::move(req), tm));
144 out <<
"ConnQueue(size=";
146 out <<
size() <<
" conn=";
167 Task(
ConnQueuePtr&& a_queue) noexcept : queue(std::move(a_queue)) { }
169 Task(Task&& other) noexcept : queue(std::move(other.queue)) { }
170 Task(
const Task&) =
delete;
174 void operator()() { queue->
run_queue(); }
176 m_ioctx->post(Task(shared_from_this()));
192 if(!conn || !conn->send_request(req->cbp, req)) {
193 if(req->insistent()) {
195 req->handle_no_conn();
198 req->handle_no_conn();
220 if((closing = empty() &&
m_delayed.empty() &&
241 TimerTask(
ConnQueuePtr&& a_queue) noexcept : queue(std::move(a_queue)) { }
243 TimerTask(TimerTask&& other) noexcept : queue(std::move(other.queue)) { }
244 TimerTask(
const TimerTask&) =
delete;
245 TimerTask&
operator=(TimerTask&&) =
delete;
246 TimerTask&
operator=(
const TimerTask&) =
delete;
247 ~TimerTask() noexcept { }
248 void operator()(
const asio::error_code& ec) {
249 if(ec != asio::error::operation_aborted) {
254 m_timer->async_wait(TimerTask(shared_from_this()));