cocos2d-x 网络请求

#include "HelloWorldScene.h"
#include "CMessage.h"
#include "CCloud.h"
#include "curl/curl.h"

USING_NS_CC;
USING_NS_CC_EXT;



CCScene* HelloWorld::scene()
{
    // 'scene' is an autorelease object
    CCScene *scene = CCScene::create();
    
    // 'layer' is an autorelease object
    HelloWorld *layer = HelloWorld::create();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}

#define  PRINT(i) printf("STU"#i"has %d money", student##i)

#define STA_BTN_EVT(name) void call_btn##name##Down(); \
void call_btn##name##Up();

#define DEV_BTN_EVT_DN(name) void call_btn##name##Down()
#define DEV_BTN_EVT_UP(name) void call_btn##name##Up()

DEV_BTN_EVT_DN(Start)
{
    
}

DEV_BTN_EVT_UP(Start)
{
    
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    //
    // 1. super init first
    if ( !CCLayer::init() )
    {
        return false;
    }

    //添加背景
    CCSprite *sprite = CCSprite::create(m_rc.m_bg.filename.c_str());
    sprite->setPosition(m_rc.m_bg.pos);
    this->addChild(sprite);

    //添加菜单
    CCMenu *cityMenu = CCMenu::create();
    cityMenu->setPosition(m_rc.m_cityMenu.pos);
    this->addChild(cityMenu);
   
    //添加按钮
    addItemToMenu(cityMenu, &m_rc.m_mine,       menu_selector(HelloWorld::call_select));
    addItemToMenu(cityMenu, &m_rc.m_shop,       menu_selector(HelloWorld::call_select));
    addItemToMenu(cityMenu, &m_rc.m_workShop,   menu_selector(HelloWorld::call_select));
    addItemToMenu(cityMenu, &m_rc.m_bar,        menu_selector(HelloWorld::call_select));
    addItemToMenu(cityMenu, &m_rc.m_chooseGen,  menu_selector(HelloWorld::call_select));
    addItemToMenu(cityMenu, &m_rc.m_train,      menu_selector(HelloWorld::call_select));
    addItemToMenu(cityMenu, &m_rc.m_trade,      menu_selector(HelloWorld::call_select));
    addItemToMenu(cityMenu, &m_rc.m_inherit,    menu_selector(HelloWorld::call_select));
    addItemToMenu(cityMenu, &m_rc.m_genMap,     menu_selector(HelloWorld::call_select));
    addItemToMenu(cityMenu, &m_rc.m_shrine,     menu_selector(HelloWorld::call_select));
    
    CCloud::create(this);
    
    
    return true;
}



//将menuItem添加到menu
void HelloWorld::addItemToMenu(CCMenu *menu, Stc_Node *node, SEL_MenuHandler handler)
{
    CCMenuItemImage *item = CCMenuItemImage::create(node->filename.c_str(), node->filename.c_str());
    item->setTag(node->tag);
    item->setPosition(node->pos);
    if(handler)
    {
        item->setTarget(this, handler);
    }
    menu->addChild(item);
}

//点击menuItem回调函数
void HelloWorld::call_select(CCObject *pSender)
{
    CCMenuItemImage *item = dynamic_cast<CCMenuItemImage *>(pSender);
    CCAssert(item, "item不能为空, call_select");
    
    const char *cityName[10] = {"矿区", "商店", "玉石作坊", "酒馆", "点将台", "校场", "贸易中心", "传承塔", "名将图鉴", "战神殿"};
    
    int index = item->getTag() - 101;
    CCString *msg = CCString::createWithFormat("没有开启【%s】,尽请期待!", cityName[index]);
  
    //CMessage::alert(this, msg->getCString());
    
    testAsyNet();
}



//测试请求网络数据
void HelloWorld::testAsyNet()
{
    CCHttpRequest *request = new CCHttpRequest();

    
    switch (arc4random() % 3) {
        case 0:
        {
            request->setUrl("http://www.baidu.com/img/bdlogo.gif");
            request->setTag("Baidu");
        }
            break;
        case 1:
        {
            request->setUrl("http://search.sina.com.cn/images/logo_new.png");
            request->setTag("Sina");
        }
            break;
        case 2:
        {
            request->setUrl("https://www.google.com.hk/images/srpr/logo11w.png");
            request->setTag("Google");
        }
            break;
        default:
            return;
    }
    
    
    request->setRequestType(CCHttpRequest::kHttpGet);
    request->setResponseCallback(this, (SEL_HttpResponse)(&HelloWorld::call_asyNet));
    CCHttpClient::getInstance()->setTimeoutForConnect(30);
    CCHttpClient::getInstance()->send(request);
    request->release();
    request = NULL;
    
}


void HelloWorld::call_asyNet(cocos2d::extension::CCHttpClient *sender, cocos2d::extension::CCHttpResponse *response)
{
    //    判断是否响应成功
    if (!response->isSucceed())
    {
        CCString *str = CCString::createWithFormat("请求失败, %s\n",response->getErrorBuffer());
        CMessage::alert(this, str->getCString());
        return ;
    }
    
    const char* tag = response->getHttpRequest()->getTag();
    if (0 != strcmp("Google",tag) && 0 != strcmp("Baidu",tag) && 0 != strcmp("Sina",tag))
    {
        return;
    }
        
    std::vector<char> *v = response->getResponseData();
    std::vector<char>::iterator itr = v->begin();
    //将vector<char>转化为string
    std::string str;
    while (v->end() != itr) {
            
        str.append(1, *itr);
        ++itr;
    }
    
    
    CCString *strMsg = CCString::createWithFormat("成功从%s请求图片\n", tag);
    CMessage::alert(this, strMsg->getCString());
    
    std::string picName = std::string(tag) + ".png";
    std::string path = CCFileUtils::sharedFileUtils()->getWritablePath() + picName;
    std::string buff(v->begin(),v->end());
    
    //保存到本地文件
    FILE *fp = fopen(path.c_str(), "wb+");
    fwrite(buff.c_str(), 1, v->size(),  fp);
    fclose(fp);
    
    
    CCSprite *sprite = CCSprite::create(path.c_str());
    sprite->setPosition(ccp(winSize.width / 2.0 , winSize.height / 2.0));
    this->addChild(sprite);
    
    CCScaleBy *by = CCScaleBy::create(1.0, 0);
    sprite->runAction(CCSequence::create(by, NULL));
}


//使用libCur请求网络. isSyn:是否同步请求
void HelloWorld::curlTestNet(bool isSyn)
{
    if (isSyn)
    {
        //1.同步请求http,并且使用CURLOPT_FOLLOWLOCATION获取返回数据
        
         CURL *curl = curl_easy_init();
         CURLcode res;
         
         if (curl) {
         curl_easy_setopt(curl,CURLOPT_URL, "http://esample.com");
         curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION, 1L);
         res = curl_easy_perform(curl);
         
         if (res != CURLE_OK) {
         fprintf(stderr, "curl_easy_perform() failed:%s\n",curl_easy_strerror(res));
         }
         curl_easy_cleanup(curl);
         
         }
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值