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)单步网络接收的更多相关文章

  1. 从网络获取json数据,使用imageloader获取网络图片资源并显示在ListView上

    http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0 这是一个接口,通过这个接口来获取数据并解析 大体上就是把解析的数据还有图片u ...

  2. 关于原子哥ENC28J60网络通信模块接收数据代码的一点疑惑

    ---恢复内容开始--- 这几天做STM32的ENC28J60网络通信模块,自己在原子哥的代码上进行修改测试,,发现一个问题,电脑和板子进行通信的时候总隔一段时间板子就死机了. 使用自己的就不会死机, ...

  3. linux内核网络接收数据流程图【转】

    转自:http://blog.chinaunix.net/uid-23069658-id-3141409.html 4.3 数据接收流程图   各层主要函数以及位置功能说明:          1)s ...

  4. 31.用python中的serial向串口发送和接收数据(案例一)

    代码功能说明:1.向串口助手发送十六进制数据:0X01,0X03,0X00,0X00,0X00,0X01,0X84,0X0A: 2.用串口助手向代码发送数据,并将发送过来的数据保存在数据库中,按数据和 ...

  5. STM32 串口USART DMA方式发送接收数据

    硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 头文件 USART3_DR的地址 DMA的通道 DMA的中断 USART接收回调函数 头 ...

  6. iOS开发网络篇—JSON数据的解析

    iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...

  7. 2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9490616.html 本文用的是VS2013MFC写串口数据接收: 第一步:首先建立一个MFC ...

  8. Linux/windows com串口 java 接收数据 并解析 web程序

    1.首先应公司要求再 com 口本来使用 .net 由于 .net 适用 linux 太麻烦 改为java 准备工作 准备 RXTXconmm.jar(版本很重要) 因为版本问题我搞了一天. 主要讲述 ...

  9. 灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据

    灵动微电子ARM Cortex M0 MM32F0010 UART1和UART2中断接收数据 目录: 1.MM32F0010UART简介 2.MM32F0010UART特性 3.MM32F0010使用 ...

随机推荐

  1. IAR 路径导致的错误

    Error while running "c:\ti\simplelink_cc2640r2_sdk_1_50_00_58\..\xdctools_3_50_03_33_core\xs&qu ...

  2. ubuntu下能ping通ssh不通的解决思路

    1.首先看看是否能ping通,如果ping不通可能就要考虑网线.路由等问题了: 2.看防火墙是否关闭,sshd是否开启 3.ssh -v 服务器的ip号,根据提示寻找可能的问题: 我的问题在这一步之后 ...

  3. eclipse 注销和取消注销

    单行注释: CTRL + / 当行取消注释(一样的): CTRL + / 多行注释: CTRL + SHIFT + / 多行取消注释(斜杠换成反斜杠): CTRL + SHIFT + \

  4. Vue2 dist 目录下各个文件的区别

    vue2 经过 2.2 版本升级后, 文件变成了 8 个: vue.common.js vue.esm.js vue.js vue.min.js vue.runtime.common.js vue.r ...

  5. php之变量和常量

    PHP中的变量用一个美元符号后面跟变量来表示.变量名是区分大小写的. 变量与PHP中其它的标签一样遵循相同的规则.一个有效的变量名有字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线. 按照 ...

  6. jquery基础学习之DOM篇(二)

    在此之前请牢记,jquery 是一个合集对象!!!! 1.节点创建 js创建方法: 创建元素:document.createElement 设置属性:setAttribute 添加文本:innerHT ...

  7. vue的生命周期(lifecycle)

    这边转载一篇文章,个人认为写的不错,代码举了个例子很生动. https://segmentfault.com/a/1190000010336178

  8. java之反射的基本介绍

    什么是反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的以及动态调用对象的方法的功能称为Java的反射 ...

  9. Hibernate的一个小应用

    hibernate 第一步,导入hiberante需要用到的jar包,因为使用hibernate时候,有日志信息输出,hibernate本身没有日志输出的jar包,导入其他日志的jar包 不要忘记还有 ...

  10. PS游戏摸拟器ePSXe加速游戏速度方法

    1.启动ePSXe游戏摸拟器. 2.菜单栏上的设置->视频->在视频设置窗口 设置主视频插件->设置. 3.在设置插件的窗口帧速率选择框中 勾上使用帧速率限制 点选帧速率限制为(10 ...