cocos2dx 3.x 网络循环接收数据(RakNet::Packet* packet)单步网络接收
void FriendFightLayer::update(float dt)
{
dealWithPacket(dt);
if (m_isNeedSwitchToLobby) {
PublicMethod::changeToLobby();
}
}
void FriendFightLayer::dealWithPacket(float dt)
{
RakNet::Packet* packet = g_net.getNewPacket();
if (packet == NULL) {
return;//return之后下面的代码就不执行了,所以除了协议以外的东西,就不能写在里面了。
}
// 为什么说是单步呢?看看for循环的条件就知道了,因为有数据进来就进for就会一直取到NULL才会停止
// for( RakNet::Packet* packet = g_net.getNewPacket(); packet != NULL; packet = g_net.getNewPacket())
// {
if( packet->data[] == ID_REMOTE_DISCONNECTION_NOTIFICATION)
{
CCLOG("远端连接丢失");
m_isNeedSwitchToLobby = true;
g_net.releasePacket(packet);
}
else if( packet->data[] == ID_REMOTE_CONNECTION_LOST)
{
CCLOG("远端连接丢失");
m_isNeedSwitchToLobby = true;
g_net.releasePacket(packet);
}
else if( packet->data[] == ID_REMOTE_NEW_INCOMING_CONNECTION)
{
CCLOG("新连接进入");
g_net.releasePacket(packet);
}
else if( packet->data[] == ID_NEW_INCOMING_CONNECTION)
{
CCLOG("新连接进入");
g_net.releasePacket(packet);
}
else if( packet->data[] == ID_NO_FREE_INCOMING_CONNECTIONS)
{
CCLOG("服务器已满");
m_isNeedSwitchToLobby = true;
g_net.releasePacket(packet);
}
else if( packet->data[] == ID_DISCONNECTION_NOTIFICATION)
{
CCLOG("掉线");
m_isNeedSwitchToLobby = true;
g_net.releasePacket(packet);
}
else if( packet->data[] == ID_CONNECTION_LOST)
{
CCLOG("连接丢失");
m_isNeedSwitchToLobby = true;
g_net.releasePacket(packet);
}
else if (packet->data[] == ID_CONNECTION_ATTEMPT_FAILED)
{
CCLOG("尝试连接失败");
PlatformHelper::showHint("无法连接服务器");
MahJong_Foure_Main::s_returnToLobby = true;
m_isNeedSwitchToLobby = true;
g_net.releasePacket(packet);
}
else if( packet->data[] == ID_CONNECTION_REQUEST_ACCEPTED)
{
g_net.m_mahJongFourServerAddress = packet->systemAddress;
CCLOG("连接游戏服务器成功");
g_net.releasePacket(packet);
// RakNet::BitStream configRequest;
// configRequest.Write((RakNet::MessageID)ID_GET_CONFIG);
// g_net.getPeer()->Send(&configRequest, MEDIUM_PRIORITY, RELIABLE, 0, g_net.getServerAddress(), false);
RakNet::BitStream loginRequest;
loginRequest.Write((RakNet::MessageID)ID_LOGIN_FROM_CLIENT);//从客户端发送登陆信息
loginRequest.Write(DataManager::getInstance()->m_myData.m_id);
loginRequest.Write(m_sessionID);
loginRequest.Write(m_gameTimes);
loginRequest.Write(ConfigData::getInstance()->nProxy);
g_net.getPeer()->Send(&loginRequest, MEDIUM_PRIORITY, RELIABLE, , g_net.getServerAddress(), false);
}
else if (packet->data[] == ID_GET_CONFIG)
{
dealWithGetConfig(packet);
}
#pragma mark - 123
// else if(packet->data[0] == ID_PLAYER_LOGIN)
// {
//// LandLordsScene* loadingLayer = LandLordsScene::create();
// CCLOG("ID_PLAYER_LOGIN123456");
// }
else if (packet->data[] == ID_TABLE_LOGIN)
{
CCLOG("有玩家进入房间);
}
else if (packet->data[] == ID_LOGIN_TO_GAME)
{
dealWithLoginToGame(packet);
}
else if(packet->data[] == ID_LOGIN_FROM_CLIENT)
{
CCLOG("登录游戏服务器成功");
dealWithLoginFromClient(packet);
}
// else if(packet->data[0] == ID_VIP_SCORE)
// {
else if(packet->data[] == ID_VIP_SCORE)
{
RakNet::BitStream vipScoreResult( packet->data, packet->length, false);
vipScoreResult.IgnoreBytes( sizeof(RakNet::MessageID));
RakNet::MessageID realPacketID;
vipScoreResult.Read(realPacketID);
switch (realPacketID) {
case SVIP_ID_PULLRECORDLIST:
dealWithRecordList(vipScoreResult);
break;
case SVIP_ID_CREATETABLE:
dealWithCreateTable(vipScoreResult);
break;
case SVIP_ID_JOINTABLE:
dealWithJoinTable(vipScoreResult);
// if(m_selectedName == "landlords")
// {
// return;
// }
// else
// {
break;
// }
case SVIP_ID_EXCHANGE:
CCLOG("SVIP_ID_EXCHANGE:%d",SVIP_ID_EXCHANGE);
dealWithExchange(vipScoreResult);
break;
case SVIP_ID_PULLRECORD:
dealWithRecord(vipScoreResult);
break;
// case SVIP_ID_DISMISSTABLE_RESULT://解散桌子
// CCLOG("解散桌子SVIP_ID_DISMISSTABLE_RESULT");
// break;
default:
break;
}
g_net.releasePacket(packet);
}
else
{
CCLOG("未知数据报:%d",packet->data[]);
}
// }
}
cocos2dx 3.x 网络循环接收数据(RakNet::Packet* packet)单步网络接收的更多相关文章
- 从网络获取json数据,使用imageloader获取网络图片资源并显示在ListView上
http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0 这是一个接口,通过这个接口来获取数据并解析 大体上就是把解析的数据还有图片u ...
- 关于原子哥ENC28J60网络通信模块接收数据代码的一点疑惑
---恢复内容开始--- 这几天做STM32的ENC28J60网络通信模块,自己在原子哥的代码上进行修改测试,,发现一个问题,电脑和板子进行通信的时候总隔一段时间板子就死机了. 使用自己的就不会死机, ...
- linux内核网络接收数据流程图【转】
转自:http://blog.chinaunix.net/uid-23069658-id-3141409.html 4.3 数据接收流程图 各层主要函数以及位置功能说明: 1)s ...
- 31.用python中的serial向串口发送和接收数据(案例一)
代码功能说明:1.向串口助手发送十六进制数据:0X01,0X03,0X00,0X00,0X00,0X01,0X84,0X0A: 2.用串口助手向代码发送数据,并将发送过来的数据保存在数据库中,按数据和 ...
- STM32 串口USART DMA方式发送接收数据
硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 头文件 USART3_DR的地址 DMA的通道 DMA的中断 USART接收回调函数 头 ...
- iOS开发网络篇—JSON数据的解析
iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...
- 2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9490616.html 本文用的是VS2013MFC写串口数据接收: 第一步:首先建立一个MFC ...
- Linux/windows com串口 java 接收数据 并解析 web程序
1.首先应公司要求再 com 口本来使用 .net 由于 .net 适用 linux 太麻烦 改为java 准备工作 准备 RXTXconmm.jar(版本很重要) 因为版本问题我搞了一天. 主要讲述 ...
- 灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据
灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据 目录: 1.MM32F0010UART简介 2.MM32F0010UART特性 3.MM32F0010使用 ...
随机推荐
- 自建docker swarm体验简单之美
之前用的阿里云容器服务,但由于acsrouting的路由错乱问题,被逼上自建docker swarm的梁山.今天尝试自己搭建docker swarm,竟然轻松搞定,简单的超乎想象. 以下是实际搭建操作 ...
- robot framework ——关键字run keyword if 如何在一个条件下接多个执行语句,以及如何写复杂条件句
曾一度疯狂搜索run keyword if 的用法,帖子是挺多的,可惜,没有一个我想要的.现在我终于把我想要的用法,收集好了,在此总结下. 1.曾经天真的以为 run keyword if +条件 ...
- 若父设置了overflow: hidden;子如何不受影响
若父设置了overflow: hidden;子如何不受影响 1.如图: 2.只需要给一个position: absolute;定位 3.相当于重新给页面进行定位,右侧便会有滚动条出现. 4.overf ...
- spark application提交应用的两种方式
bin/spark-submit --help ... ... --deploy-mode DEPLOY_MODE Whether to launch the driver program loc ...
- day5_集合
集合也是一种数据类型,一个类似列表东西,它的特点是无序的,不重复的,也就是说集合中是没有重复的数据 集合的作用: 1.它可以把一个列表中重复的数据去掉,而不需要你再写判断---天生去重 2.可以做关系 ...
- PLSQL分级取数据
分级取数据 select employee_id,last_name,job_id,manager_id from employees start with employee_id=101 --emp ...
- Qt5线程错误:QThread: Destroyed while thread is still running(执行runThread->exit(0))
背景: 当前类,编写接收子线程类信号的槽函数和触发子线程类执行的信号: 新建一个子线程类,编写槽函数和信号,MyClass *m_MyClass=new MyClass(): 新建一个线程对象QThr ...
- svn 修改文件的可执行权限
设置svn可执行权限,svn:executable 1)svn propset svn:executable on 文件名/文件夹名 2)svn propset svn:executable on t ...
- 如何让html中的td文字只显示部分
以下笔记有待测试 ———————————————————— <table style="table-layout:fixed"> <tr> <td s ...
- 前端 HTML body标签相关内容 常用标签 表单标签 form里面的 label标签介绍
定义:<label> 标签为 input 元素定义标注(标记). label标签功能:关联input标签文本与表达元素,点击input标签文本时,如同点击表单元素一样. label标签是行 ...