| 171 | } |
| 172 | |
| 173 | void TaskExecutionService::PerformPoll() |
| 174 | { |
| 175 | using namespace audacity::network_manager; |
| 176 | |
| 177 | try |
| 178 | { |
| 179 | auto& serviceConfig = GetServiceConfig(); |
| 180 | auto& oauthService = GetOAuthService(); |
| 181 | |
| 182 | Request request(serviceConfig.GetTaskPollUrl()); |
| 183 | |
| 184 | request.setHeader( |
| 185 | common_headers::ContentType, common_content_types::ApplicationJson); |
| 186 | request.setHeader( |
| 187 | common_headers::Accept, common_content_types::ApplicationJson); |
| 188 | |
| 189 | SetCommonHeaders(request); |
| 190 | SetOptionalHeaders(request); |
| 191 | |
| 192 | auto response = NetworkManager::GetInstance().doGet(request); |
| 193 | |
| 194 | bool responseReceived = false; |
| 195 | std::string responseBody; |
| 196 | int httpCode = 0; |
| 197 | |
| 198 | response->setRequestFinishedCallback( |
| 199 | [&responseReceived, &responseBody, &httpCode](auto response) |
| 200 | { |
| 201 | httpCode = response->getHTTPCode(); |
| 202 | responseBody = response->template readAll<std::string>(); |
| 203 | responseReceived = true; |
| 204 | }); |
| 205 | |
| 206 | const int maxWaitSeconds = 30; |
| 207 | for (int i = 0; i < maxWaitSeconds && !responseReceived && !mStopRequested; ++i) |
| 208 | { |
| 209 | std::this_thread::sleep_for(std::chrono::seconds(1)); |
| 210 | } |
| 211 | |
| 212 | if (!responseReceived || mStopRequested) |
| 213 | return; |
| 214 | |
| 215 | if (httpCode != 200) |
| 216 | { |
| 217 | // Continue polling on error |
| 218 | return; |
| 219 | } |
| 220 | |
| 221 | auto pollResponse = sync::DeserializeAppTaskPollResponse(responseBody); |
| 222 | if (!pollResponse) |
| 223 | { |
| 224 | // Continue polling on error |
| 225 | return; |
| 226 | } |
| 227 | |
| 228 | mPollIntervalSeconds = pollResponse->Polling.IntervalSeconds; |
| 229 | mPollingDisabled = pollResponse->Polling.Stop; |
| 230 |
nothing calls this directly
no test coverage detected