void RequestManager::httpRequestDidCompleted(Object *sender, network::HttpResponse *data){ HttpResponse *response = data; HttpRequest *request = response->getHttpRequest(); BLOCK() const char *type = request->getTag(); if (!response || !strlen(type)){ LEAVE() } log(1,"%s completed", type); int statusCode = response->getResponseCode(); char statusString[64] = {}; sprintf(statusString, "HTTP Status Code=>%d, tag = %s", statusCode, request->getTag()); log(1,"response code==>%d", statusCode); if (!response->isSucceed()){ log(1,"response failed"); log(1,"error buffer: %s", response->getErrorBuffer()); std::string temName = response->getErrorBuffer(); if (temName.length() > 0){ if (!((unsigned)temName[0]&0x80)){ //you need to translate ascii to chinese } } this->dispatchRequestDidFail(type, temName.c_str()); LEAVE() }
// Poll and notify main thread if responses exists in queue void HttpClient::dispatchResponseCallbacks() { // log("CCHttpClient::dispatchResponseCallbacks is running"); HttpResponse* response = nullptr; s_responseQueueMutex.lock(); if (!s_responseQueue->empty()) { response = s_responseQueue->at(0); s_responseQueue->erase(0); } s_responseQueueMutex.unlock(); if (response) { HttpRequest *request = response->getHttpRequest(); Object *pTarget = request->getTarget(); SEL_HttpResponse pSelector = request->getSelector(); if (pTarget && pSelector) { (pTarget->*pSelector)(this, response); } response->release(); } }
// Poll and notify main thread if responses exists in queue void HttpClient::dispatchResponseCallbacks() { // log("CCHttpClient::dispatchResponseCallbacks is running"); //occurs when cocos thread fires but the network thread has already quited HttpResponse* response = nullptr; _responseQueueMutex.lock(); if (!_responseQueue.empty()) { response = _responseQueue.at(0); _responseQueue.erase(0); } _responseQueueMutex.unlock(); if (response) { HttpRequest *request = response->getHttpRequest(); const ccHttpRequestCallback& callback = request->getCallback(); Ref* pTarget = request->getTarget(); SEL_HttpResponse pSelector = request->getSelector(); if (callback != nullptr) { callback(this, response); } else if (pTarget && pSelector) { (pTarget->*pSelector)(this, response); } response->release(); // do not release in other thread request->release(); } }
// Poll and notify main thread if responses exists in queue void HttpClient::dispatchResponseCallbacks() { // log("CCHttpClient::dispatchResponseCallbacks is running"); //occurs when cocos thread fires but the network thread has already quited if (nullptr == s_responseQueue) { return; } HttpResponse* response = nullptr; s_responseQueueMutex.lock(); if (!s_responseQueue->empty()) { response = s_responseQueue->at(0); s_responseQueue->erase(0); } s_responseQueueMutex.unlock(); if (response) { HttpRequest *request = response->getHttpRequest(); Ref* pTarget = request->getTarget(); SEL_HttpResponse pSelector = request->getSelector(); if (pTarget && pSelector) { (pTarget->*pSelector)(this, response); } response->release(); } }
// Poll and notify main thread if responses exists in queue void HttpClient::dispatchResponseCallbacks(float delta) { // log("CCHttpClient::dispatchResponseCallbacks is running"); HttpResponse* response = NULL; s_responseQueueMutex.lock(); if (s_responseQueue->count()) { response = dynamic_cast<HttpResponse*>(s_responseQueue->objectAtIndex(0)); s_responseQueue->removeObjectAtIndex(0); } s_responseQueueMutex.unlock(); if (response) { --s_asyncRequestCount; HttpRequest *request = response->getHttpRequest(); Object *pTarget = request->getTarget(); SEL_HttpResponse pSelector = request->getSelector(); if (pTarget && pSelector) { (pTarget->*pSelector)(this, response); } response->release(); } if (0 == s_asyncRequestCount) { Director::getInstance()->getScheduler()->pauseTarget(this); } }