zoukankan      html  css  js  c++  java
  • cocos2d-x3.0之请求网络(phpserver)

    HelloWorldScene.h

    #ifndef __HELLOWORLD_SCENE_H__
    #define __HELLOWORLD_SCENE_H__
    
    #include "cocos2d.h"
    #include "networkHttpClient.h"
    #include "cocos-ext.h"
    
    class HelloWorld : public cocos2d::Layer
    {
    public:
        // there's no 'id' in cpp, so we recommend returning the class instance pointer
        static cocos2d::Scene* createScene();
    
        // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
        virtual bool init();
        
        // a selector callback
        void menuCloseCallback(cocos2d::Ref* pSender);
        
        // implement the "static create()" method manually
        CREATE_FUNC(HelloWorld);
    
    	void onHttpRequestComplete(cocos2d::network::HttpClient *pSender, cocos2d::network::HttpResponse *pResponse);
    	void onHttpPostComplete(cocos2d::network::HttpClient *pSender, cocos2d::network::HttpResponse *pResponse);
    };
    
    #endif // __HELLOWORLD_SCENE_H__
    

    HelloWorldScene.cpp

    #include "HelloWorldScene.h"
    USING_NS_CC;
    using namespace network;
    
    Scene* HelloWorld::createScene()
    {
        // 'scene' is an autorelease object
        auto scene = Scene::create();
        
        // 'layer' is an autorelease object
        auto layer = HelloWorld::create();
    
        // add layer as a child to scene
        scene->addChild(layer);
    
        // return the scene
        return scene;
    }
    
    // on "init" you need to initialize your instance
    bool HelloWorld::init()
    {
        //////////////////////////////
        // 1. super init first
        if ( !Layer::init() )
        {
            return false;
        }
        
        Size visibleSize = Director::getInstance()->getVisibleSize();
        Vec2 origin = Director::getInstance()->getVisibleOrigin();
    
        /////////////////////////////
        // 2. add a menu item with "X" image, which is clicked to quit the program
        //    you may modify it.
    
        // add a "close" icon to exit the progress. it's an autorelease object
        auto closeItem = MenuItemImage::create(
                                               "CloseNormal.png",
                                               "CloseSelected.png",
                                               CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
    	   /*auto closeItem = MenuItemImage::create(
                                               "CloseNormal.png",
                                               "CloseSelected.png",
    										   [](Object *sender)
    	   {
    		    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
    				MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
    				return;
    			#endif
    
    				Director::getInstance()->end();
    
    			#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    				exit(0);
    			#endif
    	   });*/
        
    	closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
                                    origin.y + closeItem->getContentSize().height/2));
    
        // create menu, it's an autorelease object
        auto menu = Menu::create(closeItem, NULL);
        menu->setPosition(Vec2::ZERO);
        this->addChild(menu, 1);
    
        /////////////////////////////
        // 3. add your codes below...
    
        // add a label shows "Hello World"
        // create and initialize a label
        
        auto label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 24);
        
        // position the label on the center of the screen
        label->setPosition(Vec2(origin.x + visibleSize.width/2,
                                origin.y + visibleSize.height - label->getContentSize().height));
    
        // add the label as a child to this layer
        this->addChild(label, 1);
    
        // add "HelloWorld" splash screen"
        auto sprite = Sprite::create("HelloWorld.png");
    
        // position the sprite on the center of the screen
        sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
    
        // add the sprite as a child to this layer
        this->addChild(sprite, 0);
    
        
        return true;
    }
    
    
    void HelloWorld::menuCloseCallback(Ref* pSender)
    {
    //#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
    //	MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
    //    return;
    //#endif
    //
    //    Director::getInstance()->end();
    //
    //#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    //    exit(0);
    //#endif
    
    	HttpRequest *request = new HttpRequest;
    	request->setUrl("http://127.0.0.1/test2.php");
    	request->setRequestType(HttpRequest::Type::GET);
    	request->setResponseCallback(this, httpresponse_selector(HelloWorld::onHttpRequestComplete));
    	request->setTag("GET1");
    	HttpClient::getInstance()->send(request);
    	request->release();
    
    	//HttpRequest* request = new HttpRequest();  
     //   request->setUrl("http://127.0.0.1/test.php");  
     //   request->setRequestType(HttpRequest::Type::POST);  
     //   request->setResponseCallback(this, httpresponse_selector(HelloWorld::onHttpPostComplete));  
          
          
       //const  char* postData = "username=zwcwu&password=123456";  
       // request->setRequestData(postData,strlen(postData) );  
       //   
       //   
       // request->setTag("POST1");  
       // HttpClient::getInstance()->send(request);  
       // request->release();
    }
    
    void HelloWorld::onHttpRequestComplete(cocos2d::network::HttpClient *pSender, cocos2d::network::HttpResponse *pResponse)
    {
    	if(!pResponse)
    	{
    		log("response is null", pResponse);
    		return;
    	}
    	if(!pResponse->isSucceed())
    	{
    		log("response failed, %s", pResponse->getErrorBuffer());
    		return;
    	}
    
    	long statusCode = pResponse->getResponseCode();
    	log("responseCode:%ld", statusCode);
    
    	std::vector<char> *buffer = pResponse->getResponseData();
    	std::string buf(buffer->begin(), buffer->end());
    	log("get requestData:%d,%s", buf.length(), buf.c_str());
    }
    
    void HelloWorld::onHttpPostComplete(cocos2d::network::HttpClient *pSender, cocos2d::network::HttpResponse *pResponse)
    {
    	if(!pResponse)
    	{
    		log("response is null", pResponse);
    		return;
    	}
    	if(!pResponse->isSucceed())
    	{
    		log("response failed, %s", pResponse->getErrorBuffer());
    		return;
    	}
    
    	long statusCode = pResponse->getResponseCode();
    	log("responseCode:%ld", statusCode);
    
    	std::vector<char> *buffer = pResponse->getResponseData();
    	std::string buf(buffer->begin(), buffer->end());
    	log("get requestData:%s", buf.c_str());
    }

    test.php

     <html>
          <body>
              <?php  
            
             if(isset($_POST["username"]) && isset($_POST["password"]))  
             {  
    			 echo $_POST["username"];
                 if($_POST["username"]=="zwcwu" && $_POST["password"]=="123456")  
                 {  
                     echo "Login Success"; //return to client  
                 }  
                 else  
                 {  
    				echo "Login Failed"; //return to client  
                 }  
             }  
             else  
             {  
                 echo "No Username or Password"; //return to client  
             }  
             ?>
          </body>
        </html>

    test2.php

    <?php
    	echo "WC"
    ?>


  • 相关阅读:
    Python 编码问题(十四)
    Python 编程核心知识体系-文件对象|错误处理(四)
    Python 编程核心知识体系-模块|面向对象编程(三)
    项目中的走查
    回滚代码及pod install报错
    UI-3
    UI-2
    UI-1
    MarkDown基本语法速记
    Swift3.0-closure的@autoclosure和@escaping
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4296478.html
Copyright © 2011-2022 走看看