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. vins-mono代码解读

    系统框架介绍 1. Measurement Preprocessing(观测预处理):对图像提feature做feature tracking,输出tracked feature list, 对IMU ...

  2. 网卡配置文件详解 用户管理与文件权限篇 文件与目录权限 软连接 tar解压命令 killall命令 linux防火墙 dns解析设置 计划任务crond服务 软件包安装 阿里云 yum源 安装

    Linux系统基础优化及常用命令 Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ...

  3. 各种可再发行组件包Redistributable及framework 下载

    安装包名称 版本号 下载地址 Visual C++ 2005 Redistributable Package (x64)   下载 Visual C++ Redistributable Package ...

  4. “对外部(局部)变量的访问”是C语言函数指针的最大弱点

    1.“对外部(局部)变量的访问”是C语言函数指针的最大弱点 . #include <stdio.h> #include <stdlib.h> /* 结构体定义 */ struc ...

  5. 关于struts中的表单元素- Form bean not specified on mapping for action: "helloa.do"报错

    今天测试struts时仿照书上写了一个小的表单提交代码 <html:form action="helloa.do" method="post"> & ...

  6. mysql学习【第3篇】:使用DQL查询数据

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! mysql学习[第3篇]:使用DQL查询数据 DQL语言 DQL( Data Query Lan ...

  7. Glide加载图片报错You must not call setTag() on a view Glide is targeting

    报错信息为:You must not call setTag() on a view Glide is targeting 原因就是View使用setTag后导致Glide之前请求的标记被清除,强制转 ...

  8. linux之无公网ip的自动登录

    场景 对于有公网ip的链接方式我们都比较清楚了,但是有些服务器不允许直接登录或者没有直接登录的公网ip,所以只能通过一个可以直接登录的堡垒机跳转.这时需要你手动去敲ssh远程链接命令(例如:ssh r ...

  9. iptables编写规则

    [-t 表名]:该规则所操作的哪个表,可以使用filter.nat等,如果没有指定则默认为filter -A:新增一条规则,到该规则链列表的最后一行 -I:插入一条规则,原本该位置上的规则会往后顺序移 ...

  10. 4.0-uC/OS-III目录结构

    本文章都是基于学习野火STMF4系列的开发板的学习做的,大部分都是开发手册的内容,做笔记用,具体请参考野火官方的开发手册. 1. uC/OS-III 文件结构 ①配置文件,通过定义这些文件里宏的值可以 ...