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使用 ...
随机推荐
- IAR 路径导致的错误
Error while running "c:\ti\simplelink_cc2640r2_sdk_1_50_00_58\..\xdctools_3_50_03_33_core\xs&qu ...
- ubuntu下能ping通ssh不通的解决思路
1.首先看看是否能ping通,如果ping不通可能就要考虑网线.路由等问题了: 2.看防火墙是否关闭,sshd是否开启 3.ssh -v 服务器的ip号,根据提示寻找可能的问题: 我的问题在这一步之后 ...
- eclipse 注销和取消注销
单行注释: CTRL + / 当行取消注释(一样的): CTRL + / 多行注释: CTRL + SHIFT + / 多行取消注释(斜杠换成反斜杠): CTRL + SHIFT + \
- Vue2 dist 目录下各个文件的区别
vue2 经过 2.2 版本升级后, 文件变成了 8 个: vue.common.js vue.esm.js vue.js vue.min.js vue.runtime.common.js vue.r ...
- php之变量和常量
PHP中的变量用一个美元符号后面跟变量来表示.变量名是区分大小写的. 变量与PHP中其它的标签一样遵循相同的规则.一个有效的变量名有字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线. 按照 ...
- jquery基础学习之DOM篇(二)
在此之前请牢记,jquery 是一个合集对象!!!! 1.节点创建 js创建方法: 创建元素:document.createElement 设置属性:setAttribute 添加文本:innerHT ...
- vue的生命周期(lifecycle)
这边转载一篇文章,个人认为写的不错,代码举了个例子很生动. https://segmentfault.com/a/1190000010336178
- java之反射的基本介绍
什么是反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的以及动态调用对象的方法的功能称为Java的反射 ...
- Hibernate的一个小应用
hibernate 第一步,导入hiberante需要用到的jar包,因为使用hibernate时候,有日志信息输出,hibernate本身没有日志输出的jar包,导入其他日志的jar包 不要忘记还有 ...
- PS游戏摸拟器ePSXe加速游戏速度方法
1.启动ePSXe游戏摸拟器. 2.菜单栏上的设置->视频->在视频设置窗口 设置主视频插件->设置. 3.在设置插件的窗口帧速率选择框中 勾上使用帧速率限制 点选帧速率限制为(10 ...