AKever

导航

Cocos2dx HttpClient的导入使用

Cocos2dx HttpClient的导入使用

版本:vs2012 + cocos2dx 3.6 (win8.1)

参考 ccp-tests/../../HttpClientTest 例子(还是会遇到一些配置小问题的)

==================================

1.配置项目工程

新建项目工程(如:HttpDemo) 配置:

在Additional Include Directories(C\C++ -> General)添加路径
(cocos2dx并没有把#include路径全包括,需要自己小处理)

$(EngineRoot)
$(EngineRoot)cocos\network

在Additional Dependencies(Linker -> Input)添加lib库

libcurl_imp.lib

2.直接在直接在HelloWorldScene编程

注意头文件(基本没什么问题)

#include "cocos2d.h"
#include "cocos-ext.h"
#include "HttpClient.h"

USING_NS_CC;
USING_NS_CC_EXT;
using namespace cocos2d::network;

HttpRequest 请求代码:

bool HelloWorld::init()
{
... ...
    /*   httpClient  */
    HttpRequest* request = new (std::nothrow) HttpRequest();
    request->setUrl("http://just-make-this-request-failed.com");
    request->setRequestType(HttpRequest::Type::GET);
    request->setResponseCallback(CC_CALLBACK_2(HelloWorld::onHttpRequestCompleted, this));
    bool isImmediate = true;
    if (isImmediate)
    {
        request->setTag("GET immediate test1");
        HttpClient::getInstance()->sendImmediate(request);
    }else
    {
        request->setTag("GET test1");
        HttpClient::getInstance()->send(request);
    }
    request->release();
... ...
}

HttpResponse代码(在request请求设置的回调):

void HelloWorld::onHttpRequestCompleted(cocos2d::network::HttpClient *sender, cocos2d::network::HttpResponse *response)
{
    if (!response)
    {
        return;
    }
    
    // You can get original request type from: response->request->reqType
    if (0 != strlen(response->getHttpRequest()->getTag())) 
    {
        log("%s completed", response->getHttpRequest()->getTag());
    }
    
    long statusCode = response->getResponseCode();
    char statusString[64] = {};
    sprintf(statusString, "HTTP Status Code: %ld, tag = %s", statusCode, response->getHttpRequest()->getTag());
    log("response code: %ld", statusCode);

    if (!response->isSucceed()) 
    {
        log("response failed");
        log("error buffer: %s", response->getErrorBuffer());
        return;
    }

    // dump data
    std::vector<char> *buffer = response->getResponseData();
    log("Http Test, dump data: ");
    for (unsigned int i = 0; i < buffer->size(); i++)
    {
        log("%c", (*buffer)[i]);
    }
    log("\n");
    if (response->getHttpRequest()->getReferenceCount() != 2)
    {
        log("request ref count not 2, is %d", response->getHttpRequest()->getReferenceCount());
    }
}

 

posted on 2015-06-26 00:18  AKever  阅读(837)  评论(0)    收藏  举报