#include "request_timer.hpp" #include "factory.hpp" namespace acs { void request_timer::response_handler(const std::pair& response) { auto factory = factory::get(); auto token = response.first; auto stunum = response.second; if (token != "") { auto qr_encoder = factory->get_qr_encoder(); qr_encoder->encode_url(token); if (stunum != "") { if (conn_->stunum_exists(stunum)) controller_->authorized(); else controller_->forbidden(); } else { controller_->force_reset_if_idle(); } } defer(); } void request_timer::callback_handler(const boost::system::error_code& ec) { if (ec) exit(1); auto factory = factory::get(); auto state = factory->get_state(); if (state->get_status() == state::idle) request_delegate_->execute(boost::bind(&request_timer::response_handler, this, _1)); } void request_timer::defer() { timer_.expires_from_now(boost::posix_time::millisec(5'000)); timer_.async_wait(boost::bind( &request_timer::callback_handler, this, boost::asio::placeholders::error)); } request_timer::request_timer() : loop_( factory::get()->get_loop()), timer_( *loop_->get_io_service()), conn_( factory::get()->get_mysql()), request_delegate_( factory::get()->get_request_delegate()), controller_( factory::get()->get_controller()) { defer(); } }