| 
									
										
										
										
											2024-12-11 15:08:57 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 文件名:Socket.nut | 
					
						
							|  |  |  | 路径:User/Socket/Socket.nut | 
					
						
							|  |  |  | 创建日期:2024-12-01	14:47 | 
					
						
							|  |  |  | 文件用途:网络通信 | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | class MySocket extends Socket { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //字符串包处理逻辑 | 
					
						
							|  |  |  |     PackHandler = null; | 
					
						
							|  |  |  |     //数据流包处理逻辑 | 
					
						
							|  |  |  |     PackBinaryHandler = null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     State = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     constructor(Ip, Port) { | 
					
						
							|  |  |  |         //初始化处理逻辑Map | 
					
						
							|  |  |  |         PackHandler = {}; | 
					
						
							|  |  |  |         PackBinaryHandler = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //先执行父类的构造函数 | 
					
						
							|  |  |  |         base.constructor(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         //绑定回调函数 | 
					
						
							|  |  |  |         BindFunc(SOCKET_CALLBACK_TYPE.onConnect, function() { | 
					
						
							|  |  |  |             State = 1; | 
					
						
							|  |  |  |         }.bindenv(this)); | 
					
						
							|  |  |  |         BindFunc(SOCKET_CALLBACK_TYPE.onReceive, function(PacketId, Str) { | 
					
						
							| 
									
										
										
										
											2024-12-15 20:17:09 +08:00
										 |  |  |             // print("收到消息:" + PacketId + " " + Str); | 
					
						
							| 
									
										
										
										
											2024-12-11 15:08:57 +08:00
										 |  |  |             //如果存在对应处理逻辑 | 
					
						
							|  |  |  |             if (PackHandler.rawin(PacketId)) { | 
					
						
							|  |  |  |                 //将字符画序列化json | 
					
						
							|  |  |  |                 local Jso = Json.Decode(Str); | 
					
						
							|  |  |  |                 PackHandler[PacketId](Jso); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }.bindenv(this)); | 
					
						
							|  |  |  |         BindFunc(SOCKET_CALLBACK_TYPE.onReceiveBinary, function(PacketId, Blob_Obj) { | 
					
						
							|  |  |  |             //如果存在对应处理逻辑 | 
					
						
							|  |  |  |             if (PackBinaryHandler.rawin(PacketId)) { | 
					
						
							|  |  |  |                 PackBinaryHandler[PacketId](Blob_Obj); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }.bindenv(this)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Connect(Ip, Port, false); | 
					
						
							|  |  |  |         //注册自己到全局 | 
					
						
							|  |  |  |         getroottable()._MySocket_ <- this; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //注册字符串包处理逻辑 | 
					
						
							|  |  |  |     function RegisterHandler(PacketId, Func) { | 
					
						
							|  |  |  |         getroottable()._MySocket_.PackHandler.rawset(PacketId, Func); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //注册数据流包处理逻辑 | 
					
						
							|  |  |  |     function RegisterBinaryHandler(PacketId, Func) { | 
					
						
							|  |  |  |         getroottable()._MySocket_.PackBinaryHandler.rawset(PacketId, Func); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //发包 | 
					
						
							|  |  |  |     function Send(PacketId, Jso) { | 
					
						
							| 
									
										
										
										
											2024-12-15 20:17:09 +08:00
										 |  |  |         local SendObject; | 
					
						
							|  |  |  |         if (typeof Jso == "table") SendObject = Json.Encode(Jso); //table转json字符串 字符串包 | 
					
						
							|  |  |  |         else if (typeof Jso == "blob") SendObject = Jso; //字节流包 | 
					
						
							|  |  |  |         else SendObject = ""; //空包 | 
					
						
							|  |  |  |         Socket_SendPacket(getroottable()._MySocket_.Client, PacketId, SendObject); | 
					
						
							| 
									
										
										
										
											2024-12-11 15:08:57 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | } |