54 lines
1.7 KiB
C++
54 lines
1.7 KiB
C++
#include "request_timer.hpp"
|
|
#include "factory.hpp"
|
|
|
|
namespace acs
|
|
{
|
|
void request_timer::response_handler(const std::pair<std::string, std::string>& 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();
|
|
}
|
|
}
|