首页 > 代码库 > cocos2dx 3.x 网络循环接收数据(RakNet::Packet* packet)单步网络接收
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
cocos2dx 3.x 网络循环接收数据(RakNet::Packet* packet)单步网络接收
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。