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  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM