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  
时间: 2024-10-12 21:42:59

cocos2dx 3.x 网络循环接收数据(RakNet::Packet* packet)单步网络接收的相关文章

iOS开发网络篇—JSON数据的解析

iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组 {"name" : "jack", "age" : 10} {"names" : ["jack", "rose", "jim

iOS开发网络篇—XML数据的解析

iOS开发网络篇—XML数据的解析 iOS开发网络篇—XML介绍 一.XML简单介绍 XML:全称是Extensible Markup Language,译作“可扩展标记语言” 跟JSON一样,也是常用的一种用于交互的数据格式,一般也叫XML文档(XML Document) XML举例 <videos> <video name="小黄人 第01部" length="30" /> <video name="小黄人 第02部&qu

2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题

本文用的是VS2013MFC写串口数据接收: 第一步:首先建立一个MFC工程,成功后会跳出一个对话框,直接在对话框上点击右键->点击插入ACTIVAE控件->选择MicrosoftCommunications Control, version 6.0 成功后会显示一个电话的图标在对话框上,运行起来不会显示的 不用担心这个美观问题.如果没有这个插件的话,可能是版本太低  可以自己下载一个补上 第二步:大概的窗体搞好:   那个显示图片的大框是PICTURE控件变量 然后就要项目->类向导中

关于原子哥ENC28J60网络通信模块接收数据代码的一点失误

这几天做STM32的ENC28J60网络通信模块,自己在原子哥的代码上进行修改测试,,发现一个问题,电脑和板子进行通信的时候总隔一段时间板子就死机了. 直接源码 struct netbuf *recvbuf;//接收buf struct pbuf *q; err_t recv_err;//接收数据返回信息 u32 data_len = 0; //客户端接收数组的长度 u8 tcp_server_recvbuf[TCP_SERVER_RX_BUFSIZE]; //TCP客户端接收数据缓冲区 mem

网络编程的循环收发数据

服务器 from socket import * server = socket(AF_INET,SOCK_STREAM)#创建服务器对象,套接字家族,面向网络,选择tcp协议,udp(DGRAM) HOST = "127.0.0.1"#设置服务器ip PORT = 8888#设置端口 BASE_SIZE = 1024#设置接收文件上限 server.bind((HOST,PORT))#绑定端口,ip server.listen(5)#监听 while True: conn,addr

udp网络程序-发送、接收数据

1. udp网络程序-发送数据 创建一个基于udp的网络程序流程很简单,具体步骤如下: 创建客户端套接字 发送/接收数据 关闭套接字 代码如下: #coding=utf-8 from socket import * # 1. 创建udp套接字 udp_socket = socket(AF_INET, SOCK_DGRAM) # 2. 准备接收方的地址 # '192.168.1.103'表示目的ip地址 # 8080表示目的端口 dest_addr = ('192.168.1.103', 8080

Vue 接收数据for循环渲染出的标签jQuery渲染的点击事件无效

Vue 接收数据for循环渲染出的标签jQuery渲染的点击事件无效 Vue在渲染页面的时候使用jQuery的时候会发现当在created生命周期中获取后台数据,写在 mounted 生命周期的jquery渲染的点击事件不管用了. 理论上,mounted是界面html生成结束才会开始执行的,应该是可以的,但实际效果就是不行. 原因 问题的原因出现在,jquery确实在界面HTML生成之后执行了,但是当时向后台请求的数据还没请求回来,当请求回来用for循环重新渲染数据后,jquery已经执行完了,

Java基础知识强化之网络编程笔记06:TCP之TCP协议发送数据 和 接收数据

1. TCP协议发送数据 和 接收数据 TCP协议接收数据:• 创建接收端的Socket对象• 监听客户端连接.返回一个对应的Socket对象• 获取输入流,读取数据显示在控制台• 释放资源 TCP协议发送数据: • 创建发送端的Socket对象• 这一步如果成功,就说明连接已经建立成功了.• 获取输出流,写数据• 释放资源 2. 代码实现: (1)发送端: 1 package cn.itcast_06; 2 3 import java.io.IOException; 4 import java

Java基础知识强化之网络编程笔记03:UDP之UDP协议发送数据 和 接收数据

1. UDP协议发送数据 和 接收数据 UDP协议发送数据: • 创建发送端的Socket对象 • 创建数据,并把数据打包 • 调用Socket对象的发送方法,发送数据包 • 释放资源  UDP协议接收数据:       • 创建接收端的Socket对象      • 创建数据包,接收数据(接收容器)      • 调用Socket对象的接收方法,接收数据包      • 解析数据包,并显示在控制台      • 释放资源 2. 代码实现 (1)首先我们先写发送端的程序,如下: 1 packag