Browse Source

【优化】房间主线程每秒执行一次

johnclot69 11 months ago
parent
commit
0b56f2075f

+ 7 - 7
DotNet/Hotfix/Helper/ProtoHelper.cs

@@ -38,14 +38,14 @@ namespace ET.Server
             info.RoomId = room.RoomId;
             info.Type = room.Type;
             info.OwnerId = room.OwnerId;
-            HGHHMainCheckerComponent hghhMainCheckerComponent = room.GetComponent<HGHHMainCheckerComponent>();
-            if (hghhMainCheckerComponent != null)
+            HGHuangHuangComponent hgHuangHuangComponent = room.GetComponent<HGHuangHuangComponent>();
+            if (hgHuangHuangComponent != null)
             {
-                info.State = hghhMainCheckerComponent.State;
-                info.Time = hghhMainCheckerComponent.Time;
-                info.Rand1 = hghhMainCheckerComponent.Rand[0];
-                info.Rand2 = hghhMainCheckerComponent.Rand[1];
-                info.CardNum = hghhMainCheckerComponent.CardList.Count;
+                info.State = hgHuangHuangComponent.State;
+                info.Time = hgHuangHuangComponent.Time;
+                info.Rand1 = hgHuangHuangComponent.Rand[0];
+                info.Rand2 = hgHuangHuangComponent.Rand[1];
+                info.CardNum = hgHuangHuangComponent.CardList.Count;
                 info.OpId = 0;
                 info.OpPos = 0;
             }

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

@@ -69,8 +69,8 @@ namespace ET.Server
             }
             
             // todo 房间状态是否可进入, 后面这个判断要调整
-            HGHHMainCheckerComponent hghhMainCheckerComponent = room.GetComponent<HGHHMainCheckerComponent>();
-            if (hghhMainCheckerComponent != null && hghhMainCheckerComponent.State != 0)
+            HGHuangHuangComponent hgHuangHuangComponent = room.GetComponent<HGHuangHuangComponent>();
+            if (hgHuangHuangComponent != null && hgHuangHuangComponent.State != 0)
             {
                 response.Error = ErrorCode.ERR_OperationError;
                 response.Message = "房间已开始,不可进入...";

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

@@ -68,8 +68,8 @@ namespace ET.Server
 			}
 			
 			// todo 是否踢人状态, 后面这个判断要调整
-			HGHHMainCheckerComponent hghhMainCheckerComponent = room.GetComponent<HGHHMainCheckerComponent>();
-			if (hghhMainCheckerComponent != null && hghhMainCheckerComponent.State != 0)
+			HGHuangHuangComponent hgHuangHuangComponent = room.GetComponent<HGHuangHuangComponent>();
+			if (hgHuangHuangComponent != null && hgHuangHuangComponent.State != 0)
 			{
 				response.Error = ErrorCode.ERR_ParameterError;
 				response.Message = "游戏进行中,不可踢人...";

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

@@ -42,8 +42,8 @@ namespace ET.Server
             }
             
             // todo 玩家房间是否已开始, 后面这个判断要调整
-            HGHHMainCheckerComponent hghhMainCheckerComponent = room.GetComponent<HGHHMainCheckerComponent>();
-            if (hghhMainCheckerComponent != null && hghhMainCheckerComponent.State != 0)
+            HGHuangHuangComponent hgHuangHuangComponent = room.GetComponent<HGHuangHuangComponent>();
+            if (hgHuangHuangComponent != null && hgHuangHuangComponent.State != 0)
             {
                 response.Error = ErrorCode.ERR_OperationError;
                 response.Message = "房间已开始,不可准备...";

+ 96 - 97
DotNet/Hotfix/Scenes/Game/Room/HGHHMainCheckerComponentSystem.cs → DotNet/Hotfix/Scenes/Game/Room/HGHuangHuangComponentSystem.cs

@@ -4,13 +4,13 @@ using System.Linq;
 
 namespace ET.Server
 {
-    [FriendOf(typeof (HGHHMainCheckerComponent))]
-    public static class HGHHMainCheckerComponentSystem
+    [FriendOf(typeof (HGHuangHuangComponent))]
+    public static class HGHuangHuangComponentSystem
     {
         [ObjectSystem]
-        public class HGHHMainCheckerComponentAwakeSystem: AwakeSystem<HGHHMainCheckerComponent>
+        public class HGHuangHuangComponentAwakeSystem: AwakeSystem<HGHuangHuangComponent>
         {
-            protected override void Awake(HGHHMainCheckerComponent self)
+            protected override void Awake(HGHuangHuangComponent self)
             {
                 Room room = self.GetParent<Room>();
                 if (room == null)
@@ -25,7 +25,10 @@ namespace ET.Server
                 self.State = 0;
                 self.Players = new Player[4];
                 self.CurrentRound = 0;
+                self.ZhuangPos = 0;
+                self.Rand = new[] { 0, 0 };
                 self.CardList = new List<int>();
+                self.NextUpdateTime = 0;
                 // 初始化玩家
                 int index = 0;
                 foreach (Player player in room.GetAllPlayers().Values)
@@ -49,19 +52,27 @@ namespace ET.Server
         }
     
         [ObjectSystem]
-        public class HGHHMainCheckerComponentDestroySystem: DestroySystem<HGHHMainCheckerComponent>
+        public class HGHuangHuangComponentDestroySystem: DestroySystem<HGHuangHuangComponent>
         {
-            protected override void Destroy(HGHHMainCheckerComponent self)
+            protected override void Destroy(HGHuangHuangComponent self)
             {
                 Log.Info($"销毁黄冈晃晃主逻辑组件...");
             }
         }
 
         [ObjectSystem]
-        public class HGHHMainCheckerComponentUpdateSystem: UpdateSystem<HGHHMainCheckerComponent>
+        public class HGHuangHuangComponentUpdateSystem: UpdateSystem<HGHuangHuangComponent>
         {
-            protected override void Update(HGHHMainCheckerComponent self)
+            protected override void Update(HGHuangHuangComponent self)
             {
+                long timeNow = TimeHelper.ClientNow();
+                // 每秒执行一次
+                if (timeNow - self.NextUpdateTime <= 1000)
+                {
+                    return;
+                }
+                self.NextUpdateTime = timeNow;
+                
                 Room room = self.GetParent<Room>();
                 if (room == null)
                 {
@@ -69,80 +80,67 @@ namespace ET.Server
                     return;
                 }
                 Log.Debug($"检测: 黄冈晃晃-房间号:{room.RoomId}, 状态:{self.State}...");
-            
-                try
-                {
-                    self.Check(room);
-                }
-                catch (Exception e)
+                
+                switch (self.State)
                 {
-                    Log.Error($"move timer error: {self.Id}\n{e}");
-                }
-            }
-        }
-
-        private static void Check(this HGHHMainCheckerComponent self, Room room)
-        {
-            Log.Debug($"检测: 黄冈晃晃-房间号:{room.RoomId}...");
-            switch (self.State)
-            {
-                case 0:
-                    // 等待状态
-                    Log.Debug($"检测: 黄冈晃晃-房间号:{room.RoomId}, 状态:检测是否可开局...");
-                    if (self.CheckReadySatrt(room))
-                    {
-                        self.State = 1;
-                        self.Flag = false;
-                        self.Time = 0;
-                    }
-                    break;
-                case 1:
-                    // 开局
-                    if (!self.Flag)
-                    {
-                        if (self.Time >= 3)
+                    case 0:
+                        // 等待状态
+                        Log.Debug($"检测: 黄冈晃晃-房间号:{room.RoomId}, 状态:检测是否可开局...");
+                        if (self.CheckReadySatrt(room))
                         {
-                            self.Start(room);
-                            self.Flag = true;
+                            self.State = 1;
+                            self.Flag = false;
                             self.Time = 0;
-                            Log.Debug($"检测: 黄冈晃晃-房间号:{room.RoomId}, 状态:开局...VS动画...");
                         }
-                    }
-                    else
-                    {
-                        if (self.Time > 0)
+                        break;
+                    case 1:
+                        // 开局
+                        if (!self.Flag)
                         {
-                            self.State = 2;
-                            self.Flag = false;
+                            if (self.Time >= 3)
+                            {
+                                self.Start(room);
+                                self.Flag = true;
+                                self.Time = 0;
+                                Log.Debug($"检测: 黄冈晃晃-房间号:{room.RoomId}, 状态:开局...VS动画...");
+                            }
+                        }
+                        else
+                        {
+                            if (self.Time > 0)
+                            {
+                                self.State = 2;
+                                self.Flag = false;
+                                self.Time = 0;
+                            }
+                        }
+                        break;
+                    case 2:
+                        // 进行中
+                        if (!self.Flag)
+                        {
+                            self.Flag = true;
                             self.Time = 0;
+                            // 摸牌
+                            self.DrawCard(room);
                         }
-                    }
-                    break;
-                case 2:
-                    // 进行中
-                    if (!self.Flag)
-                    {
-                        self.Flag = true;
-                        self.Time = 0;
-                        // 摸牌
-                        self.DrawCard(room);
-                    }
-                    else
-                    {
-                        // 强制操作
-                        if (self.Time > 30)
+                        else
                         {
+                            // 强制操作
+                            if (self.Time > 30)
+                            {
                             
+                            }
                         }
-                    }
-                    break;
-                case 3:
-                    // 已结束
+                        break;
+                    case 3:
+                        // 已结束
                     
-                    break;
+                        break;
+                }
+                
+                self.Time++;
             }
-
-            self.Time++;
         }
 
         /// <summary>
@@ -151,7 +149,7 @@ namespace ET.Server
         /// <param name="self"></param>
         /// <param name="room"></param>
         /// <returns></returns>
-        private static bool CheckReadySatrt(this HGHHMainCheckerComponent self, Room room)
+        private static bool CheckReadySatrt(this HGHuangHuangComponent self, Room room)
         {
             if (!room.IsStart() || self.State != 0)
             {
@@ -167,12 +165,36 @@ namespace ET.Server
             return true;
         }
 
+        
+        /// <summary>
+        /// 发牌
+        /// </summary>
+        /// <param name="self"></param>
+        /// <param name="room"></param>
+        private static void SendCard(this HGHuangHuangComponent self, Room room)
+        {
+            foreach (Player player in room.GetAllPlayers().Values)
+            {
+                if (player == null)
+                {
+                    continue;
+                }
+
+                for (int i = 0; i < 13; i++)
+                {
+                    int card = self.CardList[0];
+                    player.RemainCards.Add(card);
+                    self.CardList.RemoveAt(0);
+                }
+            }
+        }
+
         /// <summary>
         /// 游戏开局
         /// </summary>
         /// <param name="self"></param>
         /// <param name="room"></param>
-        private static void Start(this HGHHMainCheckerComponent self, Room room)
+        private static void Start(this HGHuangHuangComponent self, Room room)
         {
             self.CurrentRound += 1;
             // 摇骰子
@@ -187,7 +209,7 @@ namespace ET.Server
             self.DrawCardPlayer = room.GetAllPlayers()[self.ZhuangPos];
             // 发牌
             self.SendCard(room);
-            // 通知客户端
+            // 广播
             foreach (Player player in room.GetAllPlayers().Values)
             {
                 if (player != null)
@@ -201,35 +223,12 @@ namespace ET.Server
             }
         }
         
-        /// <summary>
-        /// 发牌
-        /// </summary>
-        /// <param name="self"></param>
-        /// <param name="room"></param>
-        private static void SendCard(this HGHHMainCheckerComponent self, Room room)
-        {
-            foreach (Player player in room.GetAllPlayers().Values)
-            {
-                if (player == null)
-                {
-                    continue;
-                }
-
-                for (int i = 0; i < 13; i++)
-                {
-                    int card = self.CardList[0];
-                    player.RemainCards.Add(card);
-                    self.CardList.RemoveAt(0);
-                }
-            }
-        }
-
         /// <summary>
         /// 摸牌
         /// </summary>
         /// <param name="self"></param>
         /// <param name="room"></param>
-        private static void DrawCard(this HGHHMainCheckerComponent self, Room room)
+        private static void DrawCard(this HGHuangHuangComponent self, Room room)
         {
             
         }

+ 1 - 1
DotNet/Hotfix/Scenes/Game/Room/RoomSystem.cs

@@ -23,7 +23,7 @@ namespace ET.Server
                 {
                     case 1:
                         // 黄冈晃晃
-                        self.AddComponent<HGHHMainCheckerComponent>();
+                        self.AddComponent<HGHuangHuangComponent>();
                         break;
                     case 2:
                         break;

+ 3 - 2
DotNet/Model/Scenes/Game/Room/HGHHMainCheckerComponent.cs → DotNet/Model/Scenes/Game/Room/HGHuangHuangComponent.cs

@@ -3,7 +3,7 @@
 namespace ET.Server
 {
     [ComponentOf(typeof(Room))]
-    public class HGHHMainCheckerComponent: Entity, IAwake, IDestroy, IUpdate
+    public class HGHuangHuangComponent: Entity, IAwake, IDestroy, IUpdate
     {
         /** 检测标记 **/
         public bool Flag { get; set; }
@@ -29,8 +29,9 @@ namespace ET.Server
         public int DrawCard { get; set; }
         /** 当前摸牌玩家 **/
         public Player DrawCardPlayer { get; set; }
-
         /** 牌库 **/
         public List<int> CardList { get; set; }
+        /** 下一次更新时间 **/
+        public long NextUpdateTime { get; set; }
     }
 }