140 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名:SocketBase.nut
 | |
| 路径:BaseClass/Socket/SocketBase.nut
 | |
| 创建日期:2024-04-10	10:13
 | |
| 文件用途:套接字连接
 | |
| */
 | |
| //todo 公告接口
 | |
| 
 | |
| class Socket {
 | |
| 
 | |
|     /*
 | |
|      * @函数作用: 发送包给插件网关
 | |
|      * @参数 Table
 | |
|      * @返回值
 | |
|      */
 | |
|     function SendGateway(T) {
 | |
|         local str = Json.Encode(T);
 | |
|         if (PacketDebugModel) print("发送包给网关: " + str);
 | |
|         if (getroottable().rawin("Sq_SendPackToGateway")) Sq_SendPackToGateway(str);
 | |
|     }
 | |
| 
 | |
| 
 | |
| }
 | |
| 
 | |
| //网关链接建立回调Map
 | |
| if (!getroottable().rawin("OnGatewaySocketConnectFunc")) OnGatewaySocketConnectFunc <- {};
 | |
| //插件网关建立连接时
 | |
| function OnGatewaySocketConnect() {
 | |
|     print("############凌众插件连接建立############");
 | |
|     print("############凌众插件连接建立############");
 | |
|     print("############凌众插件连接建立############");
 | |
|     print("############凌众插件连接建立############");
 | |
|     local Jso = {
 | |
|         op = 10001,
 | |
|         channel = Sq_Game_GetConfig(),
 | |
|         type = 1
 | |
|     }
 | |
|     Socket.SendGateway(Jso);
 | |
| 
 | |
|     foreach(value in OnGatewaySocketConnectFunc) {
 | |
|         value();
 | |
|     }
 | |
| }
 | |
| //网关包回调Map
 | |
| if (!getroottable().rawin("GatewaySocketPackFuncMap")) GatewaySocketPackFuncMap <- {}
 | |
| //插件网关收到包时
 | |
| function OnGatewaySocketMsg(Msg) {
 | |
|     if (PacketDebugModel) print("收到网关包:" + Msg);
 | |
|     local Jso = Json.Decode(Msg);
 | |
|     if (!("op" in Jso)) {
 | |
|         if (PacketDebugModel) print("收到空op包");
 | |
|         return;
 | |
|     }
 | |
|     if (Jso.op in GatewaySocketPackFuncMap) {
 | |
|         GatewaySocketPackFuncMap[Jso.op](Jso);
 | |
|     } else {
 | |
|         // print(Msg);
 | |
|         local SUser = World.GetUserByUidCid(Jso.uid, Jso.cid);
 | |
|         if (SUser) {
 | |
|             local Pack = Packet();
 | |
|             Pack.Put_Header(1, 130);
 | |
|             Pack.Put_Byte(1);
 | |
|             Pack.Put_Int(Msg.len());
 | |
|             Pack.Put_Binary(Msg);
 | |
|             Pack.Finalize(true);
 | |
|             SUser.Send(Pack);
 | |
|             Pack.Delete();
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| //公用接口
 | |
| /*
 | |
|  * @函数作用: 调用玩家移动城镇
 | |
|  * @参数 Jso  需要参数uid cid town regionId
 | |
|  * @返回值
 | |
|  */
 | |
| GatewaySocketPackFuncMap[20240408] <- function(Jso) {
 | |
|     local SUser = World.GetUserByUidCid(Jso.uid, Jso.cid);
 | |
|     if (SUser) {
 | |
|         World.MoveArea(SUser, Jso.town, Jso.regionId, Jso.X, Jso.Y);
 | |
|     }
 | |
| }
 | |
| /*
 | |
|  * @函数作用: 让指定玩家组队并进入副本
 | |
|  * @参数 Jso  需要参数uid cid Member   最外层uid cid 确定队长  Member 里面是一个uid 和 cid 信息对象的List  注意队长不要放进去
 | |
|  * @返回值
 | |
|  */
 | |
| GatewaySocketPackFuncMap[20240416] <- function(Jso) {
 | |
|     local SUser = World.GetUserByUidCid(Jso.uid, Jso.cid);
 | |
|     if (SUser) {
 | |
|         local Gm = GameManager();
 | |
|         local SParty = Gm.GetParty();
 | |
|         SParty.Create(SUser);
 | |
|         foreach(_Index, PlayerInfo in Jso.Member) {
 | |
|             local UserBuf = World.GetUserByUidCid(PlayerInfo.uid, PlayerInfo.cid);
 | |
|             if (UserBuf) {
 | |
|                 SParty.Join(UserBuf);
 | |
|             }
 | |
|         }
 | |
|         SParty.SendIpInfo();
 | |
|         World.SendPartyInfoToAll(SParty);
 | |
|         if (Jso.map != 0) {
 | |
|             local T = {
 | |
|                 op = 2024041602,
 | |
|                 map = Jso.map
 | |
|             }
 | |
|             SUser.SendJso(T);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /***********************************************
 | |
|  ****************                ****************
 | |
|  ************************************************/
 | |
| 
 | |
| //客户端包回调Map
 | |
| if (!getroottable().rawin("ClientSocketPackFuncMap")) ClientSocketPackFuncMap <- {}
 | |
| 
 | |
| 
 | |
| //收到来自客户端的包 只有130
 | |
| function OnClientSocketMsg(C_User, C_Pack_Str) {
 | |
|     if (PacketDebugModel) print("收到客户端包: " + C_Pack_Str);
 | |
| 
 | |
|     local Jso = Json.Decode(C_Pack_Str);
 | |
|     if (Jso.op in ClientSocketPackFuncMap) {
 | |
|         local SUser = User(C_User);
 | |
|         ClientSocketPackFuncMap[Jso.op](SUser, Jso);
 | |
|     } else {
 | |
|         local SUser = User(C_User);
 | |
|         if (SUser) {
 | |
|             Jso.uid <- SUser.GetUID();
 | |
|             Jso.cid <- SUser.GetCID();
 | |
|             Socket.SendGateway(Jso);
 | |
|         }
 | |
|     }
 | |
| } |