zoukankan      html  css  js  c++  java
  • cocos2dx 3.x 网络循环接收数据(RakNet::Packet* packet)单步网络接收

      1  
      2 
      3 void FriendFightLayer::update(float dt)
      4 
      5 {
      6 
      7     dealWithPacket(dt);
      8 
      9     if (m_isNeedSwitchToLobby) {
     10 
     11         PublicMethod::changeToLobby();
     12 
     13     }
     14 
     15 }
     16 
     17 void FriendFightLayer::dealWithPacket(float dt)
     18 
     19 {
     20 
     21     RakNet::Packet* packet = g_net.getNewPacket();
     22 
     23     if (packet == NULL) {
     24 
     25         return;//return之后下面的代码就不执行了,所以除了协议以外的东西,就不能写在里面了。
     26 
     27     }
     28 
     29 //  为什么说是单步呢?看看for循环的条件就知道了,因为有数据进来就进for就会一直取到NULL才会停止
     30 
     31 //    for( RakNet::Packet* packet = g_net.getNewPacket(); packet != NULL; packet = g_net.getNewPacket())
     32 
     33 //    {
     34 
     35  
     36 
     37         if( packet->data[0] == ID_REMOTE_DISCONNECTION_NOTIFICATION)
     38 
     39         {
     40 
     41             CCLOG("远端连接丢失");
     42 
     43             m_isNeedSwitchToLobby = true;
     44 
     45             g_net.releasePacket(packet);
     46 
     47         }
     48 
     49         else if( packet->data[0] == ID_REMOTE_CONNECTION_LOST)
     50 
     51         {
     52 
     53             CCLOG("远端连接丢失");
     54 
     55             m_isNeedSwitchToLobby = true;
     56 
     57             g_net.releasePacket(packet);
     58 
     59         }
     60 
     61         else if( packet->data[0] == ID_REMOTE_NEW_INCOMING_CONNECTION)
     62 
     63         {
     64 
     65             CCLOG("新连接进入");
     66 
     67             g_net.releasePacket(packet);
     68 
     69         }
     70 
     71         else if( packet->data[0] == ID_NEW_INCOMING_CONNECTION)
     72 
     73         {
     74 
     75             CCLOG("新连接进入");
     76 
     77             g_net.releasePacket(packet);
     78 
     79         }
     80 
     81         else if( packet->data[0] == ID_NO_FREE_INCOMING_CONNECTIONS)
     82 
     83         {
     84 
     85             CCLOG("服务器已满");
     86 
     87             m_isNeedSwitchToLobby = true;
     88 
     89             g_net.releasePacket(packet);
     90 
     91         }
     92 
     93         else if( packet->data[0] == ID_DISCONNECTION_NOTIFICATION)
     94 
     95         {
     96 
     97             CCLOG("掉线");
     98 
     99             m_isNeedSwitchToLobby = true;
    100 
    101             g_net.releasePacket(packet);
    102 
    103         }
    104 
    105         else if( packet->data[0] == ID_CONNECTION_LOST)
    106 
    107         {
    108 
    109             CCLOG("连接丢失");
    110 
    111             m_isNeedSwitchToLobby = true;
    112 
    113             g_net.releasePacket(packet);
    114 
    115         }
    116 
    117         else if (packet->data[0] == ID_CONNECTION_ATTEMPT_FAILED)
    118 
    119         {
    120 
    121             CCLOG("尝试连接失败");
    122 
    123             PlatformHelper::showHint("无法连接服务器");
    124 
    125             MahJong_Foure_Main::s_returnToLobby = true;
    126 
    127             m_isNeedSwitchToLobby = true;
    128 
    129             g_net.releasePacket(packet);
    130 
    131         }
    132 
    133         else if( packet->data[0] == ID_CONNECTION_REQUEST_ACCEPTED)
    134 
    135         {
    136 
    137             g_net.m_mahJongFourServerAddress = packet->systemAddress;
    138 
    139             CCLOG("连接游戏服务器成功");
    140 
    141             g_net.releasePacket(packet);
    142 
    143             
    144 
    145 //            RakNet::BitStream configRequest;
    146 
    147 //            configRequest.Write((RakNet::MessageID)ID_GET_CONFIG);
    148 
    149 //            g_net.getPeer()->Send(&configRequest, MEDIUM_PRIORITY, RELIABLE, 0, g_net.getServerAddress(), false);
    150 
    151             
    152 
    153             RakNet::BitStream loginRequest;
    154 
    155             loginRequest.Write((RakNet::MessageID)ID_LOGIN_FROM_CLIENT);//从客户端发送登陆信息
    156 
    157             loginRequest.Write(DataManager::getInstance()->m_myData.m_id);
    158 
    159             loginRequest.Write(m_sessionID);
    160 
    161             loginRequest.Write(m_gameTimes);
    162 
    163             loginRequest.Write(ConfigData::getInstance()->nProxy);
    164 
    165             g_net.getPeer()->Send(&loginRequest, MEDIUM_PRIORITY, RELIABLE, 0, g_net.getServerAddress(), false);
    166 
    167         }
    168 
    169         else if (packet->data[0] == ID_GET_CONFIG)
    170 
    171         {
    172 
    173             dealWithGetConfig(packet);
    174 
    175         }
    176 
    177 #pragma mark - 123
    178 
    179 //        else if(packet->data[0] == ID_PLAYER_LOGIN)
    180 
    181 //        {
    182 
    183 ////            LandLordsScene* loadingLayer = LandLordsScene::create();
    184 
    185 //            CCLOG("ID_PLAYER_LOGIN123456");
    186 
    187 //        }
    188 
    189         else if (packet->data[0] == ID_TABLE_LOGIN)
    190 
    191         {
    192 
    193             CCLOG("有玩家进入房间);
    194 
    195         }
    196 
    197        
    198 
    199         else if (packet->data[0] == ID_LOGIN_TO_GAME)
    200 
    201         {
    202 
    203             dealWithLoginToGame(packet);
    204 
    205         }
    206 
    207         else if(packet->data[0] == ID_LOGIN_FROM_CLIENT)
    208 
    209         {
    210 
    211             CCLOG("登录游戏服务器成功");
    212 
    213             dealWithLoginFromClient(packet);
    214 
    215         }
    216 
    217 //        else if(packet->data[0] == ID_VIP_SCORE)
    218 
    219 //        {
    220 
    221     
    222 
    223         else if(packet->data[0] == ID_VIP_SCORE)
    224 
    225         {
    226 
    227             RakNet::BitStream vipScoreResult( packet->data, packet->length, false);
    228 
    229             vipScoreResult.IgnoreBytes( sizeof(RakNet::MessageID));
    230 
    231             RakNet::MessageID realPacketID;
    232 
    233             vipScoreResult.Read(realPacketID);
    234 
    235             switch (realPacketID) {
    236 
    237                 case SVIP_ID_PULLRECORDLIST:
    238 
    239                     dealWithRecordList(vipScoreResult);
    240 
    241                     break;
    242 
    243                 case SVIP_ID_CREATETABLE:
    244 
    245                     dealWithCreateTable(vipScoreResult);
    246 
    247                     break;
    248 
    249                 case SVIP_ID_JOINTABLE:
    250 
    251                     dealWithJoinTable(vipScoreResult);
    252 
    253 //                    if(m_selectedName == "landlords")
    254 
    255 //                    {
    256 
    257 //                        return;
    258 
    259 //                    }
    260 
    261 //                    else
    262 
    263 //                    {
    264 
    265                         break;
    266 
    267 //                    }
    268 
    269                 case SVIP_ID_EXCHANGE:
    270 
    271                     CCLOG("SVIP_ID_EXCHANGE:%d",SVIP_ID_EXCHANGE);
    272 
    273                     dealWithExchange(vipScoreResult);
    274 
    275                     break;
    276 
    277                 case SVIP_ID_PULLRECORD:
    278 
    279                     dealWithRecord(vipScoreResult);
    280 
    281                     break;
    282 
    283                     
    284 
    285 //                case SVIP_ID_DISMISSTABLE_RESULT://解散桌子
    286 
    287 //                     CCLOG("解散桌子SVIP_ID_DISMISSTABLE_RESULT");
    288 
    289 //                    break;
    290 
    291                     
    292 
    293                 default:
    294 
    295                     break;
    296 
    297             }
    298 
    299             g_net.releasePacket(packet);
    300 
    301         }
    302 
    303         else
    304 
    305         {
    306 
    307             CCLOG("未知数据报:%d",packet->data[0]);
    308 
    309         }
    310 
    311   //  }
    312 
    313    
    314 
    315 }
    316 
    317  
  • 相关阅读:
    fgets()函数读取键盘,去掉换行符或丢弃多余的字符
    c语言gets()函数与它的替代者fgets()函数
    基于京东手机销售数据用回归决策树预测价格
    「我去,这也能行!」令人惊叹的8个深度学习应用
    常见数据结构的 Python 实现(建议收藏)
    60 分钟极速入门 PyTorch
    大牛推荐的15本学习数据分析挖掘的好书
    排名前20的网页爬虫工具
    如何11 周打造全能Python工程师!
    初学者的编程自学指南
  • 原文地址:https://www.cnblogs.com/luorende/p/6276819.html
Copyright © 2011-2022 走看看