Forráskód Böngészése

简化一下网络层代码,不管内网外网在new MemoryStream的时候都有ActorId,
只是在TChannel跟KChannel发送的时候判断,外网不发送ActorId。牺牲一点点
内存,简化代码逻辑

tanghai 3 éve
szülő
commit
0151f5b93c

+ 1 - 1
Server/Hotfix/Module/Actor/ActorMessageSenderComponentSystem.cs

@@ -137,7 +137,7 @@ namespace ET
                 throw new Exception($"actor id is 0: {request}");
                 throw new Exception($"actor id is 0: {request}");
             }
             }
 
 
-            (ushort _, MemoryStream stream) = MessageSerializeHelper.MessageToStream(0, request);
+            (ushort _, MemoryStream stream) = MessageSerializeHelper.MessageToStream(request);
 
 
             return await self.Call(actorId, request.RpcId, stream, needException);
             return await self.Call(actorId, request.RpcId, stream, needException);
         }
         }

+ 1 - 1
Server/Hotfix/Module/ActorLocation/ActorLocationSenderComponentSystem.cs

@@ -104,7 +104,7 @@ namespace ET
             // 先序列化好
             // 先序列化好
             int rpcId = ActorMessageSenderComponent.Instance.GetRpcId();
             int rpcId = ActorMessageSenderComponent.Instance.GetRpcId();
             iActorRequest.RpcId = rpcId;
             iActorRequest.RpcId = rpcId;
-            (ushort _, MemoryStream stream) = MessageSerializeHelper.MessageToStream(0, iActorRequest);
+            (ushort _, MemoryStream stream) = MessageSerializeHelper.MessageToStream(iActorRequest);
             
             
             long actorLocationSenderInstanceId = actorLocationSender.InstanceId;
             long actorLocationSenderInstanceId = actorLocationSender.InstanceId;
             using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.ActorLocationSender, entityId))
             using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.ActorLocationSender, entityId))

+ 14 - 3
Unity/Assets/Mono/Module/Network/KChannel.cs

@@ -394,12 +394,23 @@ namespace ET
 			}
 			}
 
 
 			MemoryStream memoryStream = kcpWaitPacket.MemoryStream;
 			MemoryStream memoryStream = kcpWaitPacket.MemoryStream;
-			int count = (int) (memoryStream.Length - memoryStream.Position);
 			
 			
-			if (this.Service.ServiceType == ServiceType.Inner)
+			switch (this.Service.ServiceType)
 			{
 			{
-				memoryStream.GetBuffer().WriteTo(0, kcpWaitPacket.ActorId);
+				case ServiceType.Inner:
+				{
+					memoryStream.GetBuffer().WriteTo(0, kcpWaitPacket.ActorId);
+					break;
+				}
+				case ServiceType.Outer:
+				{
+					// 外网不需要发送actorId,跳过
+					memoryStream.Seek(Packet.ActorIdLength, SeekOrigin.Begin);
+					break;
+				}
 			}
 			}
+			
+			int count = (int) (memoryStream.Length - memoryStream.Position);
 
 
 			// 超出maxPacketSize需要分片
 			// 超出maxPacketSize需要分片
 			if (count <= maxPacketSize)
 			if (count <= maxPacketSize)

+ 1 - 0
Unity/Assets/Mono/Module/NetworkTCP/TChannel.cs

@@ -139,6 +139,7 @@ namespace ET
 				}
 				}
 				case ServiceType.Outer:
 				case ServiceType.Outer:
 				{
 				{
+					stream.Seek(Packet.ActorIdLength, SeekOrigin.Begin); // 外网不需要actorId
 					ushort messageSize = (ushort) (stream.Length - stream.Position);
 					ushort messageSize = (ushort) (stream.Length - stream.Position);
 
 
 					this.sendCache.WriteTo(0, messageSize);
 					this.sendCache.WriteTo(0, messageSize);

+ 6 - 25
Unity/Codes/Model/Module/Message/MessageSerializeHelper.cs

@@ -68,36 +68,17 @@ namespace ET
             return stream;
             return stream;
         }
         }
         
         
-        public static (ushort, MemoryStream) MessageToStream(object message, int count = 0)
+        public static (ushort, MemoryStream) MessageToStream(object message)
         {
         {
-            MemoryStream stream = GetStream(Packet.OpcodeLength + count);
+            int headOffset = Packet.ActorIdLength;
+            MemoryStream stream = GetStream(headOffset + Packet.OpcodeLength);
 
 
             ushort opcode = OpcodeTypeComponent.Instance.GetOpcode(message.GetType());
             ushort opcode = OpcodeTypeComponent.Instance.GetOpcode(message.GetType());
             
             
-            stream.Seek(Packet.OpcodeLength, SeekOrigin.Begin);
-            stream.SetLength(Packet.OpcodeLength);
+            stream.Seek(headOffset + Packet.OpcodeLength, SeekOrigin.Begin);
+            stream.SetLength(headOffset + Packet.OpcodeLength);
             
             
-            stream.GetBuffer().WriteTo(0, opcode);
-            
-            MessageSerializeHelper.SerializeTo(opcode, message, stream);
-            
-            stream.Seek(0, SeekOrigin.Begin);
-            return (opcode, stream);
-        }
-        
-        public static (ushort, MemoryStream) MessageToStream(long actorId, object message, int count = 0)
-        {
-            int actorSize = sizeof (long);
-            MemoryStream stream = GetStream(actorSize + Packet.OpcodeLength + count);
-
-            ushort opcode = OpcodeTypeComponent.Instance.GetOpcode(message.GetType());
-            
-            stream.Seek(actorSize + Packet.OpcodeLength, SeekOrigin.Begin);
-            stream.SetLength(actorSize + Packet.OpcodeLength);
-
-            // 写入actorId
-            stream.GetBuffer().WriteTo(0, actorId);
-            stream.GetBuffer().WriteTo(actorSize, opcode);
+            stream.GetBuffer().WriteTo(headOffset, opcode);
             
             
             MessageSerializeHelper.SerializeTo(opcode, message, stream);
             MessageSerializeHelper.SerializeTo(opcode, message, stream);
             
             

+ 3 - 19
Unity/Codes/Model/Module/Message/Session.cs

@@ -165,33 +165,17 @@ namespace ET
 
 
         public void Reply(IResponse message)
         public void Reply(IResponse message)
         {
         {
-            this.Send(message);
+            this.Send(0, message);
         }
         }
 
 
         public void Send(IMessage message)
         public void Send(IMessage message)
         {
         {
-            switch (this.AService.ServiceType)
-            {
-                case ServiceType.Inner:
-                {
-                    (ushort opcode, MemoryStream stream) = MessageSerializeHelper.MessageToStream(0, message);
-                    OpcodeHelper.LogMsg(this.DomainZone(), opcode, message);
-                    this.Send(0, stream);
-                    break;
-                }
-                case ServiceType.Outer:
-                {
-                    (ushort opcode, MemoryStream stream) = MessageSerializeHelper.MessageToStream(message);
-                    OpcodeHelper.LogMsg(this.DomainZone(), opcode, message);
-                    this.Send(0, stream);
-                    break;
-                }
-            }
+            this.Send(0, message);
         }
         }
         
         
         public void Send(long actorId, IMessage message)
         public void Send(long actorId, IMessage message)
         {
         {
-            (ushort opcode, MemoryStream stream) = MessageSerializeHelper.MessageToStream(actorId, message);
+            (ushort opcode, MemoryStream stream) = MessageSerializeHelper.MessageToStream(message);
             OpcodeHelper.LogMsg(this.DomainZone(), opcode, message);
             OpcodeHelper.LogMsg(this.DomainZone(), opcode, message);
             this.Send(actorId, stream);
             this.Send(actorId, stream);
         }
         }