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使用 ...
随机推荐
- cvLoadImage函数详解
cvLoadImage是一个计算机函数,用途是图像处理,函数原型是IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAG ...
- 3-idiots hdu4609 母函数+FFT 组合数学题
http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:1e5个数,求取三个数能形成三角形的概率. 题解(这怎么会是fft入门题QAQ): 概率的算法就是三 ...
- 不可访问内存 Java四种引用包括强引用,软引用,弱引用,虚引用
小结: 1.不可访问内存是指一组没有任何可访问指针指向的由计算机程序进行动态分配的内存块. 2.垃圾收集器能决定是否一个对象还是可访问的:任何被确定不可访问的对象将会被释放. https://zh.w ...
- docker disable restart--run privileged
--restart=unless-stopped option, as @Shibashis mentioned, or update the restart policy (this require ...
- [development][http][libhtp] suricata的http库--libhtp
首先,从文档来看, 它支持管道化的http, 也可以说过于重量级. 其次, 还没有达到产品化的稳定性. 并不是完全对应我的需求, http模块是一个整体性能相关模块. 应该按需定制更合理. 但是,功能 ...
- Flink - TypeInformation
Flink 自己创建一套独立的类型系统, 参考, https://ci.apache.org/projects/flink/flink-docs-release-0.10/internals/type ...
- 转载:SDWebImage支持URL不变时更新图片内容
转载 http://blog.handy.wang/blog/2016/01/29/sdwebimagehuan-cun-zhi-tu-pian-urlbu-bian/ SDWebImage在iOS项 ...
- DBGridEh表尾显示合计 .....
设置如下就可以了..... FooterRowCount : 1 SumList--------Active:=true 双击 DBGridEh 加入所需要的列....然后在 需要合计的..... ...
- 转:ORACLE 中ROWNUM用法总结!
oracle 分页查询语句:select * from (select u.*,rownum r from (select * from userifno) u where rownum<大值) ...
- Django2.0跨域请求配置
跨域:通过js或python在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(Django)的数据.只要协议.域名.端口有任何一个不同,都被 ...