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使用 ...
随机推荐
- [转载]win7x64下的redis安装与使用
原文应用为:`https://www.cnblogs.com/koal/p/5484916.html` 先引用百度百科的一段话吧,具体可以到百科查看吧. Redis是一个开源的使用ANSI C语言编写 ...
- hdu-6415 Rikka with Nash Equilibrium dp计数题
http://acm.hdu.edu.cn/showproblem.php?pid=6415 题意:将1~n*m填入一个n*m矩阵 问只有一个顶点的构造方案. 顶点的定义是:某数同时是本行本列的最大值 ...
- 会话(Session)与cookies
由于http是无状态的,向服务器发送请求后,服务器解析请求然后返回对应的响应,服务器负责完成这个过程是完全独立的,不会记录前后状态的变化,因此缺少状态记录. 我们分别需要会话和Cookies的技术来保 ...
- iOS ARC编译器规则和内存管理规则
iOS 开发当中,自动引用计数已经是标准的内存管理方案.除了一些老旧的项目或者库已经没有人使用手动来管理内存了吧. ARC无疑是把开发者从繁琐的保留/释放引用对象逻辑中解脱出来.但这并不是万事大吉了, ...
- bitmq集群高可用测试
Rabbitmq集群高可用 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模 ...
- haproxy实现会话保持
HAProxy系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1.反向代理为什么需要设置cookie 任何一个七层的http负载均衡器,都 ...
- hung_task_timeout_secs和blocked for more than 120 seconds的解决方法
Linux系统出现hung_task_timeout_secs和blocked for more than 120 seconds的解决方法 Linux系统出现系统没有响应. 在/var/log/me ...
- nginx-upstream-bio/nio/netty-zuul2-apigateway-openresty-orange-lua-docker
upstream_addr等到走了一些弯路,才发现nginx的upstream本来就有一个upstream_addr的模块,一下子我觉得找到了方向,不过看这个变量的说明,发现它主要用在记录log上面, ...
- threadPoolExecutor的基本解析
线程池的构造方法中常见参数简介 corepoolsize:核心线程数,即便这里的线程处于空闲状态,也不会被回收,会一直存在线程池中 maxmumpoolsize:线程池所能容纳的最大线程数,超过这个数 ...
- python接口测试实例--数据驱动(程序与数据分离)
#encoding=utf-8import requestsimport jsonimport osimport hashlibimport picklefrom conf import * stat ...