67 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.1 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) {
 | |
|             // print("收到消息:" + 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) {
 | |
|         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);
 | |
|     }
 | |
| } |