Опрос прогресса клиента с помощью CPRestSDK

У меня есть задача, выполнение которой занимает некоторое время, и я хотел бы запустить ее и транслировать ход ее выполнения с помощью запроса Rest как описано здесь. Я настроил прослушиватель с опросом прогресса клиента с помощью CPPRestSDK , но не могу понять, как это сделать?

Я видел https://microsoft.github.io/cpprestsdk/classweb_1_1http_1_1http__request.html#aecb8ba4c46ba84f8135e8e95103c3cea, но я могу только увидеть способ использовать это, если я настрою веб-сокет, чтобы передать прогресс клиенту. Но я бы предпочел отслеживать прогресс от клиента с помощью опроса. Решение объяснено здесь, но я могу не вижу, как я мог бы реализовать это с помощью этой библиотеки.


person Victor.dMdB    schedule 30.10.2016    source источник


Ответы (1)


Сначала вам нужно ответить URL-адресом прослушивателю прогресса.

int progress = 0;
std::string progURL = "http://www.example.com/listener"; 
std::thread progList = std::thread{&ProgressListener, progURL, std::ref(progress)};
web::http::http_response response(web::http::status_codes::Accepted);
response.headers().add("Location", requURL);
request.reply(response);

Затем запустите поток, который позволит вам разместить отдельный слушатель.

void ProgressListener( std::string progURL, double &progress ){
  web::http::experimental::listener::http_listener progListener(hostURL);
  progListener.support(web::http::methods::GET, [&](web::http::http_request request){
    web::http::http_response response;
    response.set_status_code(web::http::status_codes::OK);
    response.headers().add("Progress", progress); // You can call the header anything pretty much
    request.reply(response);
  }
}

Затем вам нужно опросить этот URL-адрес с вашим клиентом и извлечь данные заголовка.

person Victor.dMdB    schedule 31.01.2017