Cocos2d-x3.8.1网络编程(WebSocket)

来源:互联网 发布:python对比java 编辑:程序博客网 时间:2024/05/19 14:54

//同样Cocos2d-x游戏引擎对WebSocket进行了整合封装

//使用Websocket需要继承cocos2d::network::WebSocket::Delegate这个类,并重写4个纯虚函数


//加入头文件

#include "network/WebSocket.h"

//使用命名空间

USING_NS_CC;
using namespace cocos2d::network;



//.h文件

virtual void onOpen(cocos2d::network::WebSocket* ws);

virtual void onClose(cocos2d::network::WebSocket* ws);


virtual void onMessage(cocos2d::network::WebSocket* ws,const cocos2d::network::WebSocket::Data& data);


virtual void onError(cocos2d::network::WebSocket* ws, const cocos2d::network::WebSocket::ErrorCode& error);


cocos2d::network::WebSocket* _ws;



//.cpp文件

bool HelloWorld::init()

{
    //////////////////////////////
    // 1. super init first
    if (!Layer::init())
    {
        return false;
    }


Size size = Director::getInstance()->getWinSize();


//创建对象
_ws=new WebSocket();
if (!_ws->init(*this,"ws://echo.websocket.org"))
{
CC_SAFE_DELETE(_ws);
}




auto lblSendText = Label::create("send","Arial",22);
auto menuSendText = MenuItemLabel::create(lblSendText,[=](Ref *sender){
if (_ws!=nullptr)
{

//文本发送
_ws->send("HelloWord");

//二进制发送
char value[16]="HelloWord";
_ws->send((const unsigned char*)value,(unsigned int)strlen(value));
}
});
menuSendText->setPosition(size/2);

auto menu = Menu::create();
menu->setPosition(Vec2::ZERO);
menu->addChild(menuSendText);
addChild(menu);
    
    return true;
}




void HelloWorld::onOpen(cocos2d::network::WebSocket* ws)
{
if (ws==_ws)
{
log("open");
}
}




//Data是WebSocket内部的结构体
void HelloWorld::onMessage(cocos2d::network::WebSocket* ws,const cocos2d::network::WebSocket::Data& data)
{
  if (ws==_ws)
  {
if (data.isBinary)
{
//二进制
std::string str;
for (int i = 0; i < data.len; i++)
{
if (data.bytes[i]!=0)
{
str+=data.bytes[i];
}
else
{
str+="\'\\0\'";
}
}
log("%s",str.c_str());
}
else
{
//文本
log("%s",data.bytes);
}
}
}


void HelloWorld::onClose(cocos2d::network::WebSocket* ws)
{
if (ws==_ws)
{
log("close");
}
}


//ErrorCode是WebSocket枚举类型
void HelloWorld::onError(cocos2d::network::WebSocket* ws, const cocos2d::network::WebSocket::ErrorCode& error)
{
if (ws==_ws)
{
log("error");
}
}



//运行程序

//当WebSocket初始化连接成功时



//点击label


//此时log出二行,一行是文本,一行是二进制发送


0 0
原创粉丝点击