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. [转载]win7x64下的redis安装与使用

    原文应用为:`https://www.cnblogs.com/koal/p/5484916.html` 先引用百度百科的一段话吧,具体可以到百科查看吧. Redis是一个开源的使用ANSI C语言编写 ...

  2. hdu-6415 Rikka with Nash Equilibrium dp计数题

    http://acm.hdu.edu.cn/showproblem.php?pid=6415 题意:将1~n*m填入一个n*m矩阵 问只有一个顶点的构造方案. 顶点的定义是:某数同时是本行本列的最大值 ...

  3. 会话(Session)与cookies

    由于http是无状态的,向服务器发送请求后,服务器解析请求然后返回对应的响应,服务器负责完成这个过程是完全独立的,不会记录前后状态的变化,因此缺少状态记录. 我们分别需要会话和Cookies的技术来保 ...

  4. iOS ARC编译器规则和内存管理规则

    iOS 开发当中,自动引用计数已经是标准的内存管理方案.除了一些老旧的项目或者库已经没有人使用手动来管理内存了吧. ARC无疑是把开发者从繁琐的保留/释放引用对象逻辑中解脱出来.但这并不是万事大吉了, ...

  5. bitmq集群高可用测试

    Rabbitmq集群高可用 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模 ...

  6. haproxy实现会话保持

    HAProxy系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1.反向代理为什么需要设置cookie 任何一个七层的http负载均衡器,都 ...

  7. 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 ...

  8. nginx-upstream-bio/nio/netty-zuul2-apigateway-openresty-orange-lua-docker

    upstream_addr等到走了一些弯路,才发现nginx的upstream本来就有一个upstream_addr的模块,一下子我觉得找到了方向,不过看这个变量的说明,发现它主要用在记录log上面, ...

  9. threadPoolExecutor的基本解析

    线程池的构造方法中常见参数简介 corepoolsize:核心线程数,即便这里的线程处于空闲状态,也不会被回收,会一直存在线程池中 maxmumpoolsize:线程池所能容纳的最大线程数,超过这个数 ...

  10. python接口测试实例--数据驱动(程序与数据分离)

    #encoding=utf-8import requestsimport jsonimport osimport hashlibimport picklefrom conf import * stat ...