This repository has been archived on 2018-05-28. You can view files and clone it, but cannot push or open issues or pull requests.
BBB-Simple-ACS/client/request_timer.cpp

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();
}
}