// Poll and notify main thread if responses exists in queue KDvoid CCHttpClient::dispatchResponseCallbacks ( KDfloat fDelta ) { CCHttpResponse* pResponse = KD_NULL; kdThreadMutexLock ( l_pResponseQueueMutex ); if ( l_pResponseQueue->count ( ) ) { pResponse = dynamic_cast<CCHttpResponse*> ( l_pResponseQueue->objectAtIndex ( 0 ) ); l_pResponseQueue->removeObjectAtIndex ( 0 ); } kdThreadMutexUnlock ( l_pResponseQueueMutex ); if ( pResponse ) { --l_uAsyncRequestCount; CCHttpRequest* pRequest = pResponse->getHttpRequest ( ); CCObject* pTarget = pRequest->getTarget ( ); SEL_CallFuncND pSelector = pRequest->getSelector ( ); if ( pTarget && pSelector ) { ( pTarget->*pSelector ) ( (CCNode*) this, pResponse ); } pResponse->release ( ); } if ( 0 == l_uAsyncRequestCount ) { CCDirector::sharedDirector ( )->getScheduler ( )->pauseTarget ( this ); } }
// Poll and notify main thread if responses exists in queue void CCHttpClient::dispatchResponseCallbacks(float delta) { // CCLog("CCHttpClient::dispatchResponseCallbacks is running"); CCHttpResponse* response = NULL; pthread_mutex_lock(&s_responseQueueMutex); if (s_responseQueue->count()) { response = dynamic_cast<CCHttpResponse*>(s_responseQueue->objectAtIndex(0)); s_responseQueue->removeObjectAtIndex(0); } pthread_mutex_unlock(&s_responseQueueMutex); if (response) { --s_asyncRequestCount; CCHttpRequest *request = response->getHttpRequest(); CCObject *pTarget = request->getTarget(); SEL_CallFuncND pSelector = request->getSelector(); if (pTarget && pSelector) { (pTarget->*pSelector)((CCNode *)this, response); } if (!request->_jsTarget.IsEmpty() && !request->_jsSelector.IsEmpty()) { response->flushDataToReadBuffer(); response->assignJavaScriptObject(CLS_CCHTTPRESPONSE_ID, false); this->getJSCCallFunc()->callJSFunction(request->_jsTarget, request->_jsSelector, this->getJSObjInstance(), response->getJSObjInstance()); } response->release(); } if (0 == s_asyncRequestCount) { CCDirector::sharedDirector()->getScheduler()->pauseTarget(this); } }
// Poll and notify main thread if responses exists in queue void CCHttpClient::dispatchResponseCallbacks(float delta) { // CCLog("CCHttpClient::dispatchResponseCallbacks is running"); CCHttpResponse* response = NULL; pthread_mutex_lock(&s_responseQueueMutex); if (s_responseQueue->count()) { response = dynamic_cast<CCHttpResponse*>(s_responseQueue->objectAtIndex(0)); s_responseQueue->removeObjectAtIndex(0); } pthread_mutex_unlock(&s_responseQueueMutex); if (response) { --s_asyncRequestCount; CCHttpRequest *request = response->getHttpRequest(); CCObject *pTarget = request->getTarget(); SEL_CallFuncND pSelector = request->getSelector(); if (pTarget && pSelector) { (pTarget->*pSelector)((CCNode *)this, response); } //lua if( request->getLuaCallback() != 0 ) { ptola::script::CLuaScriptFunctionInvoker::executeHttpResponseCallback(request->getLuaCallback(), response); } response->release(); } if (0 == s_asyncRequestCount) { CCDirector::sharedDirector()->getScheduler()->pauseTarget(this); } }
// Poll and notify main thread if responses exists in queue void CCHttpClient::dispatchResponseCallbacks(float delta) { // CCLog("CCHttpClient::dispatchResponseCallbacks is running"); CCHttpResponse* response = NULL; pthread_mutex_lock(&s_responseQueueMutex); if (s_responseQueue->count()) { response = dynamic_cast<CCHttpResponse*>(s_responseQueue->objectAtIndex(0)); s_responseQueue->removeObjectAtIndex(0); } pthread_mutex_unlock(&s_responseQueueMutex); if (response) { --s_asyncRequestCount; CCHttpRequest *request = response->getHttpRequest(); CAObject *pTarget = request->getTarget(); SEL_HttpResponse pSelector = request->getSelector(); if (pTarget && pSelector) { (pTarget->*pSelector)(this, response); } response->release(); } if (0 == s_asyncRequestCount) { CAScheduler::getScheduler()->pauseTarget(this); } }