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使用 ...
随机推荐
- Java的各种打包方式
JAR (Java Archive file) 包含内容:class.properties文件,是文件封装的最小单元:包含Java类的普通库.资源(resources).辅助文件(auxiliary ...
- ES6 import
ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使 ...
- [No000011C]使人醒悟的生活中的定律
1. 墨菲定律 我们在事前应该是尽可能想得周到.全面一些,如果真的发生不幸或者损失,就笑着应对吧,关键在于总结所犯的错误,而不是企图掩盖它. 2. 羊群效应 对他人的信息不可全信也不可 ...
- win server 2008添加磁盘-脱机转换为联机状态方法
解决方案如下: 1.运行:cmd2.输入:DISKPART3.DISKPART> san4.DISKPART> san policy=onlineall5.DISKPART>list ...
- [daily] socks代理转化为http代理
我用SS爬梯子,它是socks5的代理,在电脑上. 很长时间以来,我的手机是不能出去的.那么我该怎么弄才能让手机也出去呢.最简单的办法是让手机也ss. 但问题是,怎么给手机装上一个ss. 1. 用电 ...
- 图->连通性->有向图的强连通分量
文字描述 有向图强连通分量的定义:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly co ...
- 图->存储结构->邻接表
文字描述 邻接表是图的一种链式存储结构.在邻接表中,对图中每个顶点建立一个单链表,第i个单链表的结点表示依附顶点vi的边(对有向图是指以顶点vi为尾的弧).单链表中的每个结点由3个域组成,其中邻接点域 ...
- SQL常用语法大全
一. Table 增加列 1.增加列:alter table tableName add columnName varchar(30) 1.2. 修改列类型:alter table tableName ...
- RNN 网络
原文:http://yangguang2009.github.io/2016/12/18/deeplearning/recurrent-neural-networks-for-deep-learnin ...
- C++ 方阵原地旋转90度
不额外申请内存(另外的一个二维数组空间),将一个方阵(二维数组)原地旋转90度,主要的思路是,由外向内,一圈圈的进行旋转(就是依次进行交换),如下图所示,当这些圈圈都交换完了之后,就完成了原地旋转了. ...