| 241 | } |
| 242 | |
| 243 | void HttpClient::onRequestComplete(emscripten_fetch_t *fetch) |
| 244 | { |
| 245 | fetchUserData *userData = reinterpret_cast<fetchUserData *>(fetch->userData); |
| 246 | RefPtr<HttpResponse> response{ReferencedObject<HttpResponse>(userData->response)}; |
| 247 | HttpRequest *request = response->getHttpRequest(); |
| 248 | |
| 249 | // get response |
| 250 | response->setResponseCode(fetch->status); |
| 251 | // response->setErrorBuffer(fetch->statusText); |
| 252 | response->getResponseData()->assign(reinterpret_cast<const char *>(fetch->data), reinterpret_cast<const char *>(fetch->data) + fetch->numBytes); |
| 253 | emscripten_fetch_close(fetch); |
| 254 | |
| 255 | // write cookie back |
| 256 | auto cookieFilename = HttpClient::getInstance()->getCookieFilename(); |
| 257 | if (!cookieFilename.empty()) |
| 258 | { |
| 259 | EM_ASM_ARGS({ |
| 260 | FS.writeFile(UTF8ToString($0), document.cookie); |
| 261 | }, cookieFilename.data()); |
| 262 | } |
| 263 | |
| 264 | const auto isAlone = userData->isAlone; |
| 265 | delete userData; |
| 266 | |
| 267 | if (_httpClient) |
| 268 | { |
| 269 | // call back |
| 270 | const ccHttpRequestCallback &callback = request->getCallback(); |
| 271 | if (callback) |
| 272 | callback(_httpClient, response); |
| 273 | response.reset(); |
| 274 | |
| 275 | // call next request |
| 276 | if (!isAlone) |
| 277 | { |
| 278 | auto& requestQueue = _httpClient->_requestQueue; |
| 279 | if (!requestQueue.empty()) |
| 280 | { |
| 281 | HttpRequest *nextRequest = requestQueue.at(0); |
| 282 | HttpResponse *nextResp = new (std::nothrow) HttpResponse(nextRequest); |
| 283 | requestQueue.erase(0); |
| 284 | _httpClient->processResponse(nextResp, false); |
| 285 | } |
| 286 | else |
| 287 | { |
| 288 | _httpClient->decreaseThreadCountAndMayDeleteThis(); |
| 289 | } |
| 290 | } |
| 291 | } |
| 292 | } |
| 293 | |
| 294 | void HttpClient::clearResponseAndRequestQueue() |
| 295 | { |
nothing calls this directly
no test coverage detected