Parcourir la source

【增加】加入房间协议

johnclot69 il y a 1 an
Parent
commit
7b8b29a95f

+ 1 - 0
Config/Proto/OuterMessage_C_30001.proto

@@ -173,6 +173,7 @@ message G2C_CreatRoom // IResponse
 message C2G_JoinRoom // IRequest
 {
 	int32 RpcId = 1;
+	string RoomId = 2;	// 请求进入的房间号
 }
 
 message G2C_JoinRoom // IResponse

+ 2 - 2
DotNet/Hotfix/Scenes/Game/Handler/C2G_CreatRoomHandler.cs

@@ -22,7 +22,7 @@ namespace ET.Server
             }
             
             // 玩家是否在房间
-            if (player.RoomID > 0)
+            if (!string.IsNullOrEmpty(player.RoomID))
             { 
                 response.Error = ErrorCode.ERR_OperationError;
                 response.Message = "玩家已在房间,不可创建房间...";
@@ -45,7 +45,7 @@ namespace ET.Server
             
             // 返回房间数据
             response.Info = ProtoHelper.RoomToProto(room);
-        
+            reply();
             await ETTask.CompletedTask;
         }
     }

+ 60 - 9
DotNet/Hotfix/Scenes/Game/Handler/C2G_JoinRoomHandler.cs

@@ -1,15 +1,66 @@
 using System;
+using System.Drawing;
+using System.Text.RegularExpressions;
 
-namespace ET.Server;
-
-/// <summary>
-/// 加入房间
-/// </summary>
-[MessageHandler(SceneType.Game)]
-public class C2G_JoinRoomHandler : AMRpcHandler<C2G_JoinRoom, G2C_JoinRoom>
+namespace ET.Server
 {
-    protected override ETTask Run(Session session, C2G_JoinRoom request, G2C_JoinRoom response, Action reply)
+    /// <summary>
+    /// 加入房间
+    /// </summary>
+    [MessageHandler(SceneType.Game)]
+    public class C2G_JoinRoomHandler : AMRpcHandler<C2G_JoinRoom, G2C_JoinRoom>
     {
-        throw new NotImplementedException();
+        protected override async ETTask Run(Session session, C2G_JoinRoom request, G2C_JoinRoom response, Action reply)
+        {
+            Player player = session.GetComponent<SessionPlayerComponent>().GetMyPlayer();
+            if (player == null)
+            {
+                response.Error = ErrorCode.ERR_OperationError;
+                response.Message = "玩家不存在或离线...";
+                reply();
+                return;
+            }
+            // 判断参数
+            if (string.IsNullOrEmpty(request.RoomId))
+            {
+                response.Error = ErrorCode.ERR_ParameterError;
+                response.Message = "参数错误,请输入要加入房间的id...";
+                reply();
+                return;
+            }
+            // 房间号格式是否正确
+            if (Regex.IsMatch(request.RoomId, @"^\d+$"))
+            {
+                response.Error = ErrorCode.ERR_ParameterError;
+                response.Message = "参数错误,格式有误...";
+                reply();
+                return;
+            }
+            // 判断玩家是否已加入房间
+            if (!string.IsNullOrEmpty(player.RoomID) && !player.RoomID.Equals(request.RoomId))
+            { 
+                response.Error = ErrorCode.ERR_OperationError;
+                response.Message = "玩家已在房间,不可加入其他房间...";
+                reply();
+                return;
+            }
+            
+            Scene scene = session.DomainScene();
+            
+            // 请求的房间是否能找到
+            Room room = scene.GetComponent<GameRoomComponent>().Get(request.RoomId);
+            if (room == null)
+            {
+                response.Error = ErrorCode.ERR_OperationError;
+                response.Message = "请求的房间不存在或已解散...";
+                reply();
+                return;
+            }
+            
+            // 返回房间数据
+            response.Info = ProtoHelper.RoomToProto(room);
+            reply();
+            await ETTask.CompletedTask;
+        }
     }
 }

+ 1 - 1
DotNet/Hotfix/Scenes/Game/Handler/C2G_LoginGameHandler.cs

@@ -38,7 +38,7 @@ namespace ET.Server
 			session.AddComponent<MailBoxComponent, MailboxType>(MailboxType.GameSession);
 
 			response.Player = ProtoHelper.PlayerToProto(player);
-			response.IsInRoom = player.RoomID > 0;
+			response.IsInRoom = !string.IsNullOrEmpty(player.RoomID);
 			reply();
 			await ETTask.CompletedTask;
 		}

+ 0 - 1
DotNet/Hotfix/Scenes/Game/Player/PlayerSystem.cs

@@ -12,7 +12,6 @@
                 self.Account = a;
                 self.IsOnline = true;
                 self.LoginTime = TimeHelper.ServerNow();
-                self.RoomID = 0;
                 // 添加本地玩家数据
                 self.DomainScene().GetComponent<GamePlayerComponent>().Add(self);
             }

+ 3 - 0
DotNet/Model/Generate/Message/OuterMessage_C_30001.cs

@@ -350,6 +350,9 @@ namespace ET
 		[ProtoMember(1)]
 		public int RpcId { get; set; }
 
+		[ProtoMember(2)]
+		public string RoomId { get; set; }
+
 	}
 
 	[Message(OuterMessage.G2C_JoinRoom)]

+ 1 - 1
DotNet/Model/Scenes/Game/Player/Player.cs

@@ -18,7 +18,7 @@
         public bool IsOnline { get; set; }
         
         /** 房间id **/
-        public long RoomID { get; set; }
+        public string RoomID { get; set; }
 
         /** 头像 **/
         public string AvatarUrl { get; set; }

+ 3 - 0
Unity/Assets/Scripts/Codes/Model/Generate/Client/Message/OuterMessage_C_30001.cs

@@ -350,6 +350,9 @@ namespace ET
 		[ProtoMember(1)]
 		public int RpcId { get; set; }
 
+		[ProtoMember(2)]
+		public string RoomId { get; set; }
+
 	}
 
 	[Message(OuterMessage.G2C_JoinRoom)]

+ 3 - 0
Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/OuterMessage_C_30001.cs

@@ -350,6 +350,9 @@ namespace ET
 		[ProtoMember(1)]
 		public int RpcId { get; set; }
 
+		[ProtoMember(2)]
+		public string RoomId { get; set; }
+
 	}
 
 	[Message(OuterMessage.G2C_JoinRoom)]