64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名: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) {
 | |
|             //如果存在对应处理逻辑
 | |
|             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) {
 | |
|         //将json序列化字符串
 | |
|         local Str = Json.Encode(Jso);
 | |
|         Socket_SendPacket(getroottable()._MySocket_.Client, PacketId, Str);
 | |
|     }
 | |
| } |