Переглянути джерело

OneFrameMessage改成OneFrameInputs,去掉Frame字段

tanghai 2 роки тому
батько
коміт
86be8f0faa

+ 3 - 3
Share/Tool/Proto2CS/Proto2CS.cs

@@ -24,9 +24,9 @@ namespace ET
     public static class InnerProto2CS
     {
         private const string protoDir = "../Unity/Assets/Config/Proto";
-        private const string clientMessagePath = "../Unity/Assets/Scripts/Codes/Model/Generate/Client/Message/";
-        private const string serverMessagePath = "../Unity/Assets/Scripts/Codes/Model/Generate/Server/Message/";
-        private const string clientServerMessagePath = "../Unity/Assets/Scripts/Codes/Model/Generate/ClientServer/Message/";
+        private const string clientMessagePath = "../Unity/Assets/Scripts/Model/Generate/Client/Message/";
+        private const string serverMessagePath = "../Unity/Assets/Scripts/Model/Generate/Server/Message/";
+        private const string clientServerMessagePath = "../Unity/Assets/Scripts/Model/Generate/ClientServer/Message/";
         private static readonly char[] splitChars = { ' ', '\t' };
         private static readonly List<OpcodeInfo> msgOpcode = new List<OpcodeInfo>();
 

+ 1 - 2
Unity/Assets/Config/Proto/LockStepOuter_C_11001.proto

@@ -49,9 +49,8 @@ message FrameMessage // IActorMessage
 	LSInput Input = 3;
 }
 
-message OneFrameMessages // IActorMessage
+message OneFrameInputs // IActorMessage
 {
-	int32 Frame = 1;
 	map<int64, LSInput> Inputs = 2;
 }
 

+ 10 - 13
Unity/Assets/Scripts/Hotfix/Client/LockStep/OneFrameMessagesHandler.cs → Unity/Assets/Scripts/Hotfix/Client/LockStep/OneFrameInputsHandler.cs

@@ -3,42 +3,39 @@ using System;
 namespace ET.Client
 {
     [MessageHandler(SceneType.Client)]
-    public class OneFrameMessagesHandler: AMHandler<OneFrameMessages>
+    public class OneFrameInputsHandler: AMHandler<OneFrameInputs>
     {
-        protected override async ETTask Run(Session session, OneFrameMessages message)
+        protected override async ETTask Run(Session session, OneFrameInputs input)
         {
             Room room = session.DomainScene().GetComponent<Room>();
             FrameBuffer frameBuffer = room.FrameBuffer;
-            
-            if (message.Frame != room.RealFrame + 1)
-            {
-                throw new Exception($"recv oneframeMessage frame error: {message.Frame} {room.RealFrame}");
-            }
+
+            int frame = room.RealFrame + 1;
 
             ++room.RealFrame;
             // 服务端返回的消息比预测的还早
             if (room.RealFrame > room.PredictionFrame)
             {
-                OneFrameMessages realFrame = frameBuffer[room.RealFrame];
-                message.CopyTo(realFrame);
+                OneFrameInputs realFrame = frameBuffer[room.RealFrame];
+                input.CopyTo(realFrame);
                 return;
             }
             
             // 服务端返回来的消息,跟预测消息对比
-            OneFrameMessages predictionMessage = frameBuffer[message.Frame];
+            OneFrameInputs predictionInput = frameBuffer[frame];
             // 对比失败有两种可能,
             // 1是别人的输入预测失败,这种很正常,
             // 2 自己的输入对比失败,这种情况是自己发送的消息比服务器晚到了,服务器使用了你的上一次输入
             // 回滚重新预测的时候,自己的输入不用变化
-            if (message != predictionMessage)
+            if (input != predictionInput)
             {
-                message.CopyTo(predictionMessage);
+                input.CopyTo(predictionInput);
                 // 回滚到frameBuffer.RealFrame
                 LSHelper.Rollback(room, room.RealFrame);
             }
 
             // 回收消息,减少GC
-            NetServices.Instance.RecycleMessage(message);
+            NetServices.Instance.RecycleMessage(input);
             await ETTask.CompletedTask;
         }
     }

+ 6 - 7
Unity/Assets/Scripts/Hotfix/Client/LockStep/RoomClientUpdaterSystem.cs

@@ -41,17 +41,17 @@ namespace ET.Client
             }
             
             ++room.PredictionFrame;
-            OneFrameMessages oneFrameMessages = self.GetOneFrameMessages(room.PredictionFrame);
-            room.Update(oneFrameMessages, room.PredictionFrame);
+            OneFrameInputs oneFrameInputs = self.GetOneFrameMessages(room.PredictionFrame);
+            room.Update(oneFrameInputs, room.PredictionFrame);
             
 
             FrameMessage frameMessage = NetServices.Instance.FetchMessage<FrameMessage>();
-            frameMessage.Frame = oneFrameMessages.Frame;
+            frameMessage.Frame = room.PredictionFrame;
             frameMessage.Input = self.Input;
             clientScene.GetComponent<SessionComponent>().Session.Send(frameMessage);
         }
 
-        private static OneFrameMessages GetOneFrameMessages(this RoomClientUpdater self, int frame)
+        private static OneFrameInputs GetOneFrameMessages(this RoomClientUpdater self, int frame)
         {
             Room room = self.GetParent<Room>();
             FrameBuffer frameBuffer = room.FrameBuffer;
@@ -62,16 +62,15 @@ namespace ET.Client
             }
             
             // predict
-            OneFrameMessages predictionFrame = frameBuffer[frame];
+            OneFrameInputs predictionFrame = frameBuffer[frame];
             if (predictionFrame == null)
             {
                 throw new Exception($"get frame is null: {frame}, max frame: {frameBuffer.MaxFrame}");
             }
             
             frameBuffer.MoveForward(frame);
-            OneFrameMessages realFrame = frameBuffer[room.RealFrame];
+            OneFrameInputs realFrame = frameBuffer[room.RealFrame];
             realFrame?.CopyTo(predictionFrame);
-            predictionFrame.Frame = frame;
             predictionFrame.Inputs[self.MyId] = self.Input;
             
             return predictionFrame;

+ 3 - 4
Unity/Assets/Scripts/Hotfix/Server/LockStep/Map/FrameMessageHandler.cs

@@ -24,14 +24,13 @@ namespace ET.Server
                 return;
             }
             
-            OneFrameMessages oneFrameMessages = frameBuffer[message.Frame];
-            if (oneFrameMessages == null)
+            OneFrameInputs oneFrameInputs = frameBuffer[message.Frame];
+            if (oneFrameInputs == null)
             {
                 Log.Error($"FrameMessageHandler get frame is null: {message.Frame}, max frame: {frameBuffer.MaxFrame}");
                 return;
             }
-            oneFrameMessages.Frame = message.Frame;
-            oneFrameMessages.Inputs[message.PlayerId] = message.Input;
+            oneFrameInputs.Inputs[message.PlayerId] = message.Input;
 
 
             await ETTask.CompletedTask;

+ 16 - 17
Unity/Assets/Scripts/Hotfix/Server/LockStep/Room/RoomServerUpdaterSystem.cs

@@ -27,57 +27,56 @@ namespace ET.Server
                 return;
             }
 
-            OneFrameMessages oneFrameMessages = self.GetOneFrameMessage(frame);
+            OneFrameInputs oneFrameInputs = self.GetOneFrameMessage(frame);
             ++room.RealFrame;
 
-            OneFrameMessages sendMessage = new();
-            oneFrameMessages.CopyTo(sendMessage);
+            OneFrameInputs sendInput = new();
+            oneFrameInputs.CopyTo(sendInput);
 
-            RoomMessageHelper.BroadCast(room, sendMessage);
+            RoomMessageHelper.BroadCast(room, sendInput);
             
-            room.Update(oneFrameMessages, frame);
+            room.Update(oneFrameInputs, frame);
         }
 
-        private static OneFrameMessages GetOneFrameMessage(this RoomServerUpdater self, int frame)
+        private static OneFrameInputs GetOneFrameMessage(this RoomServerUpdater self, int frame)
         {
             Room room = self.GetParent<Room>();
             FrameBuffer frameBuffer = room.FrameBuffer;
-            OneFrameMessages oneFrameMessages = frameBuffer[frame];
-            if (oneFrameMessages == null)
+            OneFrameInputs oneFrameInputs = frameBuffer[frame];
+            if (oneFrameInputs == null)
             {
                 throw new Exception($"get frame is null: {frame}, max frame: {frameBuffer.MaxFrame}");
             }
             
             frameBuffer.MoveForward(frame);
             
-            oneFrameMessages.Frame = frame;
-            if (oneFrameMessages.Inputs.Count == LSConstValue.MatchCount)
+            if (oneFrameInputs.Inputs.Count == LSConstValue.MatchCount)
             {
-                return oneFrameMessages;
+                return oneFrameInputs;
             }
 
-            OneFrameMessages preFrameMessages = frameBuffer[frame - 1];
+            OneFrameInputs preFrameInputs = frameBuffer[frame - 1];
             
             // 有人输入的消息没过来,给他使用上一帧的操作
             foreach (long playerId in room.PlayerIds)
             {
-                if (oneFrameMessages.Inputs.ContainsKey(playerId))
+                if (oneFrameInputs.Inputs.ContainsKey(playerId))
                 {
                     continue;
                 }
 
-                if (preFrameMessages != null && preFrameMessages.Inputs.TryGetValue(playerId, out LSInput input))
+                if (preFrameInputs != null && preFrameInputs.Inputs.TryGetValue(playerId, out LSInput input))
                 {
                     // 使用上一帧的输入
-                    oneFrameMessages.Inputs[playerId] = input;
+                    oneFrameInputs.Inputs[playerId] = input;
                 }
                 else
                 {
-                    oneFrameMessages.Inputs[playerId] = new LSInput();
+                    oneFrameInputs.Inputs[playerId] = new LSInput();
                 }
             }
 
-            return oneFrameMessages;
+            return oneFrameInputs;
         }
     }
 }

+ 6 - 6
Unity/Assets/Scripts/Hotfix/Share/LockStep/LSHelper.cs

@@ -13,17 +13,17 @@ namespace ET
             
             // 回滚
             room.AddComponent(frameBuffer.GetLSWorld(frame));
-            OneFrameMessages realFrameMessage = frameBuffer[frame];
+            OneFrameInputs realFrameInput = frameBuffer[frame];
             // 执行RealFrame
-            room.Update(realFrameMessage, frame);
+            room.Update(realFrameInput, frame);
 
             
             // 重新执行预测的帧
             for (int i = room.RealFrame + 1; i <= room.PredictionFrame; ++i)
             {
-                OneFrameMessages oneFrameMessages = frameBuffer[i];
-                CopyOtherInputsTo(room, realFrameMessage, oneFrameMessages); // 重新预测消息
-                room.Update(oneFrameMessages, i);
+                OneFrameInputs oneFrameInputs = frameBuffer[i];
+                CopyOtherInputsTo(room, realFrameInput, oneFrameInputs); // 重新预测消息
+                room.Update(oneFrameInputs, i);
             }
             
             RollbackHelper.Rollback(room);
@@ -32,7 +32,7 @@ namespace ET
         }
 
         // 重新调整预测消息,只需要调整其他玩家的输入
-        private static void CopyOtherInputsTo(Room room, OneFrameMessages from, OneFrameMessages to)
+        private static void CopyOtherInputsTo(Room room, OneFrameInputs from, OneFrameInputs to)
         {
             long myId = room.GetComponent<RoomClientUpdater>().MyId;
             foreach (var kv in from.Inputs)

+ 6 - 6
Unity/Assets/Scripts/Hotfix/Share/LockStep/RoomSystem.cs

@@ -23,7 +23,7 @@ namespace ET
         }
 
 
-        public static void Update(this Room self, OneFrameMessages oneFrameMessages, int frame)
+        public static void Update(this Room self, OneFrameInputs oneFrameInputs, int frame)
         {
             LSWorld lsWorld = self.GetComponent<LSWorld>();
             // 保存当前帧场景数据
@@ -36,7 +36,7 @@ namespace ET
 
             // 设置输入到每个LSUnit身上
             LSUnitComponent unitComponent = lsWorld.GetComponent<LSUnitComponent>();
-            foreach (var kv in oneFrameMessages.Inputs)
+            foreach (var kv in oneFrameInputs.Inputs)
             {
                 LSUnit lsUnit = unitComponent.GetChild<LSUnit>(kv.Key);
                 LSInputComponent lsInputComponent = lsUnit.GetComponent<LSInputComponent>();
@@ -48,10 +48,10 @@ namespace ET
 
         public static void SaveData(this Room self, int frame)
         {
-            OneFrameMessages oneFrameMessages = self.FrameBuffer[frame];
-            OneFrameMessages saveMessage = new();
-            oneFrameMessages.CopyTo(saveMessage);
-            self.SaveData.MessagesList.Add(saveMessage);
+            OneFrameInputs oneFrameInputs = self.FrameBuffer[frame];
+            OneFrameInputs saveInput = new();
+            oneFrameInputs.CopyTo(saveInput);
+            self.SaveData.MessagesList.Add(saveInput);
             if (frame % LSConstValue.SaveLSWorldFrameCount == 0)
             {
                 MemoryBuffer memoryBuffer = self.FrameBuffer.GetMemoryBuffer(frame);

+ 3 - 6
Unity/Assets/Scripts/Model/Generate/Client/Message/LockStepOuter_C_11001.cs

@@ -95,13 +95,10 @@ namespace ET
 
 	}
 
-	[Message(LockStepOuter.OneFrameMessages)]
+	[Message(LockStepOuter.OneFrameInputs)]
 	[MemoryPackable]
-	public partial class OneFrameMessages: MessageObject, IActorMessage
+	public partial class OneFrameInputs: MessageObject, IActorMessage
 	{
-		[MemoryPackOrder(0)]
-		public int Frame { get; set; }
-
 		[MongoDB.Bson.Serialization.Attributes.BsonDictionaryOptions(MongoDB.Bson.Serialization.Options.DictionaryRepresentation.ArrayOfArrays)]
 		[MemoryPackOrder(1)]
 		public Dictionary<long, LSInput> Inputs { get; set; }
@@ -125,7 +122,7 @@ namespace ET
 		 public const ushort LockStepUnitInfo = 11006;
 		 public const ushort Room2C_Start = 11007;
 		 public const ushort FrameMessage = 11008;
-		 public const ushort OneFrameMessages = 11009;
+		 public const ushort OneFrameInputs = 11009;
 		 public const ushort Room2C_AdjustUpdateTime = 11010;
 	}
 }

+ 3 - 6
Unity/Assets/Scripts/Model/Generate/ClientServer/Message/LockStepOuter_C_11001.cs

@@ -95,13 +95,10 @@ namespace ET
 
 	}
 
-	[Message(LockStepOuter.OneFrameMessages)]
+	[Message(LockStepOuter.OneFrameInputs)]
 	[MemoryPackable]
-	public partial class OneFrameMessages: MessageObject, IActorMessage
+	public partial class OneFrameInputs: MessageObject, IActorMessage
 	{
-		[MemoryPackOrder(0)]
-		public int Frame { get; set; }
-
 		[MongoDB.Bson.Serialization.Attributes.BsonDictionaryOptions(MongoDB.Bson.Serialization.Options.DictionaryRepresentation.ArrayOfArrays)]
 		[MemoryPackOrder(1)]
 		public Dictionary<long, LSInput> Inputs { get; set; }
@@ -125,7 +122,7 @@ namespace ET
 		 public const ushort LockStepUnitInfo = 11006;
 		 public const ushort Room2C_Start = 11007;
 		 public const ushort FrameMessage = 11008;
-		 public const ushort OneFrameMessages = 11009;
+		 public const ushort OneFrameInputs = 11009;
 		 public const ushort Room2C_AdjustUpdateTime = 11010;
 	}
 }

+ 3 - 6
Unity/Assets/Scripts/Model/Generate/Server/Message/LockStepOuter_C_11001.cs

@@ -95,13 +95,10 @@ namespace ET
 
 	}
 
-	[Message(LockStepOuter.OneFrameMessages)]
+	[Message(LockStepOuter.OneFrameInputs)]
 	[MemoryPackable]
-	public partial class OneFrameMessages: MessageObject, IActorMessage
+	public partial class OneFrameInputs: MessageObject, IActorMessage
 	{
-		[MemoryPackOrder(0)]
-		public int Frame { get; set; }
-
 		[MongoDB.Bson.Serialization.Attributes.BsonDictionaryOptions(MongoDB.Bson.Serialization.Options.DictionaryRepresentation.ArrayOfArrays)]
 		[MemoryPackOrder(1)]
 		public Dictionary<long, LSInput> Inputs { get; set; }
@@ -125,7 +122,7 @@ namespace ET
 		 public const ushort LockStepUnitInfo = 11006;
 		 public const ushort Room2C_Start = 11007;
 		 public const ushort FrameMessage = 11008;
-		 public const ushort OneFrameMessages = 11009;
+		 public const ushort OneFrameInputs = 11009;
 		 public const ushort Room2C_AdjustUpdateTime = 11010;
 	}
 }

+ 8 - 9
Unity/Assets/Scripts/Model/Share/LockStep/FrameBuffer.cs

@@ -7,18 +7,18 @@ namespace ET
     public class FrameBuffer
     {
         public int MaxFrame { get; private set; }
-        private readonly List<OneFrameMessages> messageBuffer;
+        private readonly List<OneFrameInputs> messageBuffer;
         private readonly List<MemoryBuffer> dataBuffer;
 
         public FrameBuffer(int capacity = LSConstValue.FrameCountPerSecond * 10)
         {
             this.MaxFrame = capacity - 1;
-            this.messageBuffer = new List<OneFrameMessages>(capacity);
+            this.messageBuffer = new List<OneFrameInputs>(capacity);
             this.dataBuffer = new List<MemoryBuffer>(capacity);
             
             for (int i = 0; i < this.dataBuffer.Capacity; ++i)
             {
-                this.messageBuffer.Add(new OneFrameMessages());
+                this.messageBuffer.Add(new OneFrameInputs());
                 MemoryBuffer memoryBuffer = new(10240);
                 memoryBuffer.SetLength(0);
                 memoryBuffer.Seek(0, SeekOrigin.Begin);
@@ -26,7 +26,7 @@ namespace ET
             }
         }
         
-        public OneFrameMessages this[int frame]
+        public OneFrameInputs this[int frame]
         {
             get
             {
@@ -39,8 +39,8 @@ namespace ET
                 {
                     return null;
                 }
-                OneFrameMessages oneFrameMessages = this.messageBuffer[frame % this.messageBuffer.Capacity];
-                return oneFrameMessages;
+                OneFrameInputs oneFrameInputs = this.messageBuffer[frame % this.messageBuffer.Capacity];
+                return oneFrameInputs;
             }
         }
 
@@ -55,9 +55,8 @@ namespace ET
             
             Log.Debug($"framebuffer move forward: {this.MaxFrame}");
             
-            OneFrameMessages oneFrameMessages = this[this.MaxFrame];
-            oneFrameMessages.Inputs.Clear();
-            oneFrameMessages.Frame = 0;
+            OneFrameInputs oneFrameInputs = this[this.MaxFrame];
+            oneFrameInputs.Inputs.Clear();
         }
 
         public MemoryBuffer GetMemoryBuffer(int frame)

+ 9 - 15
Unity/Assets/Scripts/Model/Share/LockStep/OneFrameMessage.cs → Unity/Assets/Scripts/Model/Share/LockStep/OneFrameInputs.cs

@@ -3,16 +3,15 @@ using System.Collections.Generic;
 
 namespace ET
 {
-    public partial class OneFrameMessages
+    public partial class OneFrameInputs
     {
-        protected bool Equals(OneFrameMessages other)
+        protected bool Equals(OneFrameInputs other)
         {
-            return this.Frame == other.Frame && Equals(this.Inputs, other.Inputs);
+            return Equals(this.Inputs, other.Inputs);
         }
 
-        public void CopyTo(OneFrameMessages to)
+        public void CopyTo(OneFrameInputs to)
         {
-            to.Frame = this.Frame;
             to.Inputs.Clear();
             foreach (var kv in this.Inputs)
             {
@@ -37,20 +36,20 @@ namespace ET
                 return false;
             }
 
-            return Equals((OneFrameMessages) obj);
+            return Equals((OneFrameInputs) obj);
         }
 
         public override int GetHashCode()
         {
-            return HashCode.Combine(this.Frame, this.Inputs);
+            return HashCode.Combine(this.Inputs);
         }
 
-        public OneFrameMessages()
+        public OneFrameInputs()
         {
             this.Inputs = new Dictionary<long, LSInput>(LSConstValue.MatchCount);
         }
 
-        public static bool operator==(OneFrameMessages a, OneFrameMessages b)
+        public static bool operator==(OneFrameInputs a, OneFrameInputs b)
         {
             if (a is null || b is null)
             {
@@ -61,11 +60,6 @@ namespace ET
                 return false;
             }
             
-            if (a.Frame != b.Frame)
-            {
-                return false;
-            }
-
             if (a.Inputs.Count != b.Inputs.Count)
             {
                 return false;
@@ -87,7 +81,7 @@ namespace ET
             return true;
         }
 
-        public static bool operator !=(OneFrameMessages a, OneFrameMessages b)
+        public static bool operator !=(OneFrameInputs a, OneFrameInputs b)
         {
             return !(a == b);
         }

+ 11 - 0
Unity/Assets/Scripts/Model/Share/LockStep/OneFrameInputs.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cc7d50658d3c844c8b32167be54851c4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 0 - 3
Unity/Assets/Scripts/Model/Share/LockStep/OneFrameMessage.cs.meta

@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 4bdb7581d1bf417ebcb0a2d45ffad839
-timeCreated: 1681822483

+ 2 - 2
Unity/Assets/Scripts/Model/Share/LockStep/SaveData.cs

@@ -4,10 +4,10 @@ using MemoryPack;
 namespace ET
 {
     [MemoryPackable]
-    public class SaveData
+    public partial class SaveData
     {
         [MemoryPackOrder(1)]
-        public List<OneFrameMessages> MessagesList = new();
+        public List<OneFrameInputs> MessagesList = new();
         
         [MemoryPackOrder(2)]
         public List<byte[]> LSWorlds = new();