Cocos2d-X 中使用网络进行登录的实现(二)

1、在头文件中:

#include <iostream>

#include "cocos2d.h"

#include "cocos-ext.h"

#include "Scene.h"

#include "libjson.h"

#include <string.h>


USING_NS_CC;

USING_NS_CC_EXT;

#include "SimpleAudioEngine.h"

using namespace CocosDenshion;


class LoginLayer:public CCLayer

{

public:

    virtual bool init();

    SCENE_FUNC(LoginLayer);

    CREATE_FUNC(LoginLayer);

    CCEditBox *edit1;

    CCEditBox *edit;

    //加入登录界面

    void Login();

    void LoginClick();

    void RegisterClick();

    //开关声音

    void SoundOnOffClick(CCObject *sender);

    bool isSoundOpen;

    

    //链接服务器进行登录

    void Request();

    void OnHttpClick(CCHttpClient *client,CCHttpResponse *response);

   // void  PaseJson(const JSONNode & n);

    void  PaseJson(const JSONNode & n);

    

    //警告框

    void showAlert();

};

2、在实现文件中:

#include "LoginLayer.h"

#include "ResigisterLayer.h"

#include "PaserJSon.h"

#include <string>

#include <vector>

#include <numeric>



bool LoginLayer::init()

{

    if(!CCLayer::init())

    {

        return false;

    }

    isSoundOpen=false;

    this->Login();

    return true;

}


//加入登录界面

void LoginLayer::Login()

{

    CCSize winSize=CCDirector::sharedDirector()->getWinSize();

    CCSprite *s=CCSprite::create("loginbackground.png");

    s->setPosition(ccp(winSize.width/2,winSize.height/2));

    this->addChild(s);

    

    CCScale9Sprite *scale1=CCScale9Sprite::create("denglu.png");

    scale1->setScale(0.8);

    scale1->setPosition(ccp(winSize.width/2,winSize.height/2));

    this->addChild(scale1);

    //用户名的标签

    CCScale9Sprite *scale2=CCScale9Sprite::create("UserLabel.png");

    scale2->setScale(1, 2);

    scale2->setPosition(ccp(winSize.width/2-100,winSize.height/2+50));

    this->addChild(scale2);

    //密码标签

    CCScale9Sprite *scale3=CCScale9Sprite::create("PassWord.png");

     scale3->setScale(1, 2);

    scale3->setPosition(ccp(winSize.width/2-100,winSize.height/2));

    this->addChild(scale3);

    

    //用户名输入框

    CCScale9Sprite *scale4=CCScale9Sprite::create("UserNametextfield.png");

    scale4->setPosition(ccp(winSize.width/2-50,winSize.height/2+50));

    scale4->setPreferredSize(CCSizeMake(300, 100));

   edit= CCEditBox::create(CCSizeMake(200,40), scale4);

    edit->setPosition(ccp(winSize.width/2+50,winSize.height/2+50));

    edit->setTag(1);

    edit->setInputMode(kEditBoxInputModeAny);

    edit->setPlaceHolder("请输入用户名:");

    edit->setFontColor(ccc3(255, 0, 0));

    this->addChild(edit);

    //密码输入框

    CCScale9Sprite *scale5=CCScale9Sprite::create("passwordtextfield.png");

    scale5->setPosition(ccp(winSize.width/2+50,winSize.height/2));

    scale5->setPreferredSize(CCSizeMake(300, 100));

    edit1= CCEditBox::create(CCSizeMake(200,40), scale5);

    edit1->setPosition(ccp(winSize.width/2+50,winSize.height/2));

    edit->setTag(2);

    edit1->setInputMode(kEditBoxInputModeAny);

    edit1->setInputFlag(kEditBoxInputFlagPassword);

    edit1->setPlaceHolder("请输入密码:");

    edit1->setFontColor(ccc3(255, 0, 0));

    this->addChild(edit1);

    //添加按钮注册、登录

    CCMenuItemImage *resgister=CCMenuItemImage::create("zhuce_button.png", "zhuce_button2.png", this, menu_selector( LoginLayer::RegisterClick));

    resgister->setPosition(ccp(80,-50));

    

    CCMenuItemImage *login=CCMenuItemImage::create("denglu_button.png", "denglu_button2.png", this, menu_selector( LoginLayer::LoginClick));

    login->setPosition(ccp(-50,-50));

    CCMenu *menu=CCMenu::create(resgister,login,NULL);

    menu->setPosition(ccp(240,160));

    this->addChild(menu);

    //添加声音按钮

    CCMenuItemImage *soundbtnOn=CCMenuItemImage::create("soundon.png", "soundon.png");

    CCMenuItemImage *soundbtnOff=CCMenuItemImage::create("soundoff.png", "soundoff.png");

//    soundbtn->setPosition(CCPointMake(-150,-100));

    CCMenuItemToggle *toggle=CCMenuItemToggle::createWithTarget(this, menu_selector(LoginLayer::SoundOnOffClick),soundbtnOn,soundbtnOff,NULL);

    toggle->setPosition(CCPointMake(0,0));

    

    CCMenu *menu1=CCMenu::create(toggle,NULL);

    menu1->setPosition(ccp(50,50));

    this->addChild(menu1);

    

    SimpleAudioEngine::sharedEngine()->playBackgroundMusic("yinyue.mp3", true);

}


void LoginLayer::LoginClick()

{

    CCLog("denglu");

    this->Request();

}


void LoginLayer::RegisterClick()

{

    CCTransitionFadeDown *fadeDown=CCTransitionFadeDown::create(2, LoginLayer::scene());

    CCDirector::sharedDirector()->replaceScene(fadeDown);

}


void LoginLayer::SoundOnOffClick(CCObject *sender)

{

    if(isSoundOpen)

    {

        SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();

        isSoundOpen=false;

    }

    else

    {

        SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();

        isSoundOpen=true;

    }

    

}


void LoginLayer:: Request()

{

    CCString *username=CCString::create(edit->getText());

     CCString *password=CCString::create(edit1->getText());

    CCLog("%s---------------%s",username->getCString(),password->getCString());

    

    CCHttpRequest *request1=new CCHttpRequest();

    request1->setUrl("http://42.96.151.161:83/service/userlogin");

    request1->setRequestType(CCHttpRequest::kHttpPost);

    request1->setResponseCallback(this, httpresponse_selector(LoginLayer::OnHttpClick));

    char data[100];

    sprintf(data, "user_name=%s&user_password=%s",username->getCString(),password->getCString());

    request1->setRequestData(data, strlen(data));

    request1->setTag("PUST Test1");

    CCHttpClient::getInstance()->send(request1);

    //delete [] request1;

}

//request1->setResponseCallback(this, httpresponse_selector(LoginLayer::OnHttpClick));的回调函数

void LoginLayer::OnHttpClick(CCHttpClient *client,CCHttpResponse *response)

{

    if(!response)

    {

        return;

    }

    if(0!=strlen(response->getHttpRequest()->getTag()))

    {

        CCLog("%s completed",response->getHttpRequest()->getTag());

    }

    

    int statusCode = response->getResponseCode();

    char statusString[64] = {};

    sprintf(statusString, "Http Status Code:%d, tag = %s",statusCode,response->getHttpRequest()->getTag());

    if(!response->isSucceed())

    {

        CCLog("response failed");

        CCLog("error buffer:%s",response->getErrorBuffer());

        return;

    }

    std::vector<char>* buffer = response->getResponseData();

    printf("Http Test ,dump data: ");

    

    //得到string类型的数据

    std::string sum=accumulate(buffer->begin(), buffer->end(), std::string(""));

    const char *aString=sum.c_str();

    for(unsigned int i = 0; i<buffer->size();i++)

    {

        printf("%c",(*buffer)[i]);

    }

    std::cout<<std::endl;

   JSONNode n=libjson::parse(aString);

     this->PaseJson(n);

}


//解析的函数  进行判断状态 为0还是1

void  LoginLayer::PaseJson(const JSONNode & n)

{

    JSONNode::const_iterator i=n.begin();

    while (i !=n.end() )

    {

        if(i->type()==JSON_ARRAY || i->type()==JSON_NODE)

        {

            PaseJson(*i);

        }

        std::string node_name=i->name();

//方法一:

        if(  (strcmp(node_name.c_str(), "status"))==0 )

        {

            json_string node_value=i->as_string();

            if((strcmp(node_value.c_str(), "1"))==0)

            {

                CCLog("登录成功");

            }

        }

//方法二:

//        if(node_name=="status")

//        {

//            json_string status=i->as_string();

//            if(status=="1")

//            {

//                CCLog("登录成功");

//            }

//            //std::cout<<status<<std::endl;

//        }

        ++i;

    }

}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值