Procházet zdrojové kódy

修改软路由,改成IKcpTransport接口

tanghai před 2 roky
rodič
revize
42c1fe0ebc

+ 12 - 1
Unity/Assets/Scripts/Core/Network/IKcpTransport.cs

@@ -10,6 +10,7 @@ namespace ET
     {
     {
         void Send(byte[] bytes, int index, int length, EndPoint endPoint);
         void Send(byte[] bytes, int index, int length, EndPoint endPoint);
         int Recv(byte[] buffer, ref EndPoint endPoint);
         int Recv(byte[] buffer, ref EndPoint endPoint);
+        int RecvNonAlloc(byte[] buffer, ref EndPoint endPoint);
         int Available();
         int Available();
         void Update();
         void Update();
     }
     }
@@ -49,8 +50,13 @@ namespace ET
         {
         {
             this.socket.SendTo(bytes, index, length, SocketFlags.None, endPoint);
             this.socket.SendTo(bytes, index, length, SocketFlags.None, endPoint);
         }
         }
-
+        
         public int Recv(byte[] buffer, ref EndPoint endPoint)
         public int Recv(byte[] buffer, ref EndPoint endPoint)
+        {
+            return this.socket.ReceiveFrom(buffer, ref endPoint);
+        }
+
+        public int RecvNonAlloc(byte[] buffer, ref EndPoint endPoint)
         {
         {
             return this.socket.ReceiveFrom_NonAlloc(buffer, ref endPoint);
             return this.socket.ReceiveFrom_NonAlloc(buffer, ref endPoint);
         }
         }
@@ -114,6 +120,11 @@ namespace ET
         }
         }
 
 
         public int Recv(byte[] buffer, ref EndPoint endPoint)
         public int Recv(byte[] buffer, ref EndPoint endPoint)
+        {
+            return RecvNonAlloc(buffer, ref endPoint);
+        }
+
+        public int RecvNonAlloc(byte[] buffer, ref EndPoint endPoint)
         {
         {
             (long channelId, MemoryBuffer memoryBuffer) = this.channelRecvDatas.Dequeue();
             (long channelId, MemoryBuffer memoryBuffer) = this.channelRecvDatas.Dequeue();
             TChannel channel = this.tService.Get(channelId);
             TChannel channel = this.tService.Get(channelId);

+ 1 - 1
Unity/Assets/Scripts/Core/Network/KService.cs

@@ -140,7 +140,7 @@ namespace ET
 
 
             while (this.Socket != null && this.Socket.Available() > 0)
             while (this.Socket != null && this.Socket.Available() > 0)
             {
             {
-                int messageLength = this.Socket.Recv(this.cache, ref this.ipEndPoint);
+                int messageLength = this.Socket.RecvNonAlloc(this.cache, ref this.ipEndPoint);
 
 
                 // 长度小于1,不是正常的消息
                 // 长度小于1,不是正常的消息
                 if (messageLength < 1)
                 if (messageLength < 1)

+ 15 - 32
Unity/Assets/Scripts/Hotfix/Server/Module/Router/RouterComponentSystem.cs

@@ -13,25 +13,8 @@ namespace ET.Server
         [EntitySystem]
         [EntitySystem]
         private static void Awake(this RouterComponent self, IPEndPoint outerAddress, string innerIP)
         private static void Awake(this RouterComponent self, IPEndPoint outerAddress, string innerIP)
         {
         {
-            self.OuterSocket = new Socket(outerAddress.AddressFamily, SocketType.Dgram, ProtocolType.Udp);
-            self.OuterSocket.Bind(outerAddress);
-            if (!RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
-            {
-                self.OuterSocket.SendBufferSize = 16 * Kcp.OneM;
-                self.OuterSocket.ReceiveBufferSize = 16 * Kcp.OneM;
-            }
-
-            self.InnerSocket = new Socket(outerAddress.AddressFamily, SocketType.Dgram, ProtocolType.Udp);
-            self.InnerSocket.Bind(new IPEndPoint(IPAddress.Parse(innerIP), 0));
-
-            if (!RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
-            {
-                self.InnerSocket.SendBufferSize = 16 * Kcp.OneM;
-                self.InnerSocket.ReceiveBufferSize = 16 * Kcp.OneM;
-            }
-                
-            NetworkHelper.SetSioUdpConnReset(self.OuterSocket);
-            NetworkHelper.SetSioUdpConnReset(self.InnerSocket);
+            self.OuterSocket = new UdpTransport(outerAddress);
+            self.InnerSocket = new UdpTransport(new IPEndPoint(IPAddress.Parse(innerIP), 0));
         }
         }
         
         
         [EntitySystem]
         [EntitySystem]
@@ -67,11 +50,11 @@ namespace ET.Server
         // 接收udp消息
         // 接收udp消息
         private static void RecvOuter(this RouterComponent self, long timeNow)
         private static void RecvOuter(this RouterComponent self, long timeNow)
         {
         {
-            while (self.OuterSocket != null && self.OuterSocket.Available > 0)
+            while (self.OuterSocket != null && self.OuterSocket.Available() > 0)
             {
             {
                 try
                 try
                 {
                 {
-                    int messageLength = self.OuterSocket.ReceiveFrom(self.Cache, ref self.IPEndPoint);
+                    int messageLength = self.OuterSocket.Recv(self.Cache, ref self.IPEndPoint);
                     self.RecvOuterHandler(messageLength, timeNow);
                     self.RecvOuterHandler(messageLength, timeNow);
                 }
                 }
                 catch (Exception e)
                 catch (Exception e)
@@ -125,11 +108,11 @@ namespace ET.Server
 
 
         private static void RecvInner(this RouterComponent self, long timeNow)
         private static void RecvInner(this RouterComponent self, long timeNow)
         {
         {
-            while (self.InnerSocket != null && self.InnerSocket.Available > 0)
+            while (self.InnerSocket != null && self.InnerSocket.Available() > 0)
             {
             {
                 try
                 try
                 {
                 {
-                    int messageLength = self.InnerSocket.ReceiveFrom(self.Cache, ref self.IPEndPoint);
+                    int messageLength = self.InnerSocket.Recv(self.Cache, ref self.IPEndPoint);
                     self.RecvInnerHandler(messageLength, timeNow);
                     self.RecvInnerHandler(messageLength, timeNow);
                 }
                 }
                 catch (Exception e)
                 catch (Exception e)
@@ -222,7 +205,7 @@ namespace ET.Server
                     self.Cache.WriteTo(1, outerConn);
                     self.Cache.WriteTo(1, outerConn);
                     self.Cache.WriteTo(5, innerConn);
                     self.Cache.WriteTo(5, innerConn);
                     self.Cache.WriteTo(9, connectId);
                     self.Cache.WriteTo(9, connectId);
-                    self.InnerSocket.SendTo(self.Cache, 0, 13, SocketFlags.None, routerNode.InnerIpEndPoint);
+                    self.InnerSocket.Send(self.Cache, 0, 13, routerNode.InnerIpEndPoint);
 
 
                     if (!routerNode.CheckOuterCount(timeNow))
                     if (!routerNode.CheckOuterCount(timeNow))
                     {
                     {
@@ -277,7 +260,7 @@ namespace ET.Server
                     self.Cache.WriteTo(0, KcpProtocalType.RouterACK);
                     self.Cache.WriteTo(0, KcpProtocalType.RouterACK);
                     self.Cache.WriteTo(1, routerNode.InnerConn);
                     self.Cache.WriteTo(1, routerNode.InnerConn);
                     self.Cache.WriteTo(5, routerNode.OuterConn);
                     self.Cache.WriteTo(5, routerNode.OuterConn);
-                    self.OuterSocket.SendTo(self.Cache, 0, 9, SocketFlags.None, routerNode.SyncIpEndPoint);
+                    self.OuterSocket.Send(self.Cache, 0, 9, routerNode.SyncIpEndPoint);
 
 
                     if (!routerNode.CheckOuterCount(timeNow))
                     if (!routerNode.CheckOuterCount(timeNow))
                     {
                     {
@@ -329,7 +312,7 @@ namespace ET.Server
                     byte[] addressBytes = ipEndPoint.ToString().ToByteArray();
                     byte[] addressBytes = ipEndPoint.ToString().ToByteArray();
                     Array.Copy(addressBytes, 0, self.Cache, 9, addressBytes.Length);
                     Array.Copy(addressBytes, 0, self.Cache, 9, addressBytes.Length);
                     Log.Info($"kcp router syn: {outerConn} {innerConn} {kcpRouter.InnerIpEndPoint} {kcpRouter.OuterIpEndPoint}");
                     Log.Info($"kcp router syn: {outerConn} {innerConn} {kcpRouter.InnerIpEndPoint} {kcpRouter.OuterIpEndPoint}");
-                    self.InnerSocket.SendTo(self.Cache, 0, 9 + addressBytes.Length, SocketFlags.None, kcpRouter.InnerIpEndPoint);
+                    self.InnerSocket.Send(self.Cache, 0, 9 + addressBytes.Length, kcpRouter.InnerIpEndPoint);
 
 
                     if (!kcpRouter.CheckOuterCount(timeNow))
                     if (!kcpRouter.CheckOuterCount(timeNow))
                     {
                     {
@@ -364,7 +347,7 @@ namespace ET.Server
 
 
                     kcpRouter.LastRecvOuterTime = timeNow;
                     kcpRouter.LastRecvOuterTime = timeNow;
                     Log.Info($"kcp router outer fin: {outerConn} {innerConn} {kcpRouter.InnerIpEndPoint}");
                     Log.Info($"kcp router outer fin: {outerConn} {innerConn} {kcpRouter.InnerIpEndPoint}");
-                    self.InnerSocket.SendTo(self.Cache, 0, messageLength, SocketFlags.None, kcpRouter.InnerIpEndPoint);
+                    self.InnerSocket.Send(self.Cache, 0, messageLength, kcpRouter.InnerIpEndPoint);
 
 
                     if (!kcpRouter.CheckOuterCount(timeNow))
                     if (!kcpRouter.CheckOuterCount(timeNow))
                     {
                     {
@@ -412,7 +395,7 @@ namespace ET.Server
 
 
                     kcpRouter.LastRecvOuterTime = timeNow;
                     kcpRouter.LastRecvOuterTime = timeNow;
 
 
-                    self.InnerSocket.SendTo(self.Cache, 0, messageLength, SocketFlags.None, kcpRouter.InnerIpEndPoint);
+                    self.InnerSocket.Send(self.Cache, 0, messageLength, kcpRouter.InnerIpEndPoint);
 
 
                     if (!kcpRouter.CheckOuterCount(timeNow))
                     if (!kcpRouter.CheckOuterCount(timeNow))
                     {
                     {
@@ -479,7 +462,7 @@ namespace ET.Server
                     self.Cache.WriteTo(1, kcpRouterNode.InnerConn);
                     self.Cache.WriteTo(1, kcpRouterNode.InnerConn);
                     self.Cache.WriteTo(5, kcpRouterNode.OuterConn);
                     self.Cache.WriteTo(5, kcpRouterNode.OuterConn);
                     Log.Info($"kcp router RouterAck: {outerConn} {innerConn} {kcpRouterNode.SyncIpEndPoint}");
                     Log.Info($"kcp router RouterAck: {outerConn} {innerConn} {kcpRouterNode.SyncIpEndPoint}");
-                    self.OuterSocket.SendTo(self.Cache, 0, 9, SocketFlags.None, kcpRouterNode.SyncIpEndPoint);
+                    self.OuterSocket.Send(self.Cache, 0, 9, kcpRouterNode.SyncIpEndPoint);
                     break;
                     break;
                 }
                 }
 
 
@@ -501,7 +484,7 @@ namespace ET.Server
                     kcpRouterNode.LastRecvInnerTime = timeNow;
                     kcpRouterNode.LastRecvInnerTime = timeNow;
                     // 转发出去
                     // 转发出去
                     Log.Info($"kcp router ack: {outerConn} {innerConn} {kcpRouterNode.OuterIpEndPoint}");
                     Log.Info($"kcp router ack: {outerConn} {innerConn} {kcpRouterNode.OuterIpEndPoint}");
-                    self.OuterSocket.SendTo(self.Cache, 0, messageLength, SocketFlags.None, kcpRouterNode.OuterIpEndPoint);
+                    self.OuterSocket.Send(self.Cache, 0, messageLength, kcpRouterNode.OuterIpEndPoint);
                     break;
                     break;
                 }
                 }
                 case KcpProtocalType.FIN: // 断开
                 case KcpProtocalType.FIN: // 断开
@@ -536,7 +519,7 @@ namespace ET.Server
 
 
                     kcpRouterNode.LastRecvInnerTime = timeNow;
                     kcpRouterNode.LastRecvInnerTime = timeNow;
                     Log.Info($"kcp router inner fin: {outerConn} {innerConn} {kcpRouterNode.OuterIpEndPoint}");
                     Log.Info($"kcp router inner fin: {outerConn} {innerConn} {kcpRouterNode.OuterIpEndPoint}");
-                    self.OuterSocket.SendTo(self.Cache, 0, messageLength, SocketFlags.None, kcpRouterNode.OuterIpEndPoint);
+                    self.OuterSocket.Send(self.Cache, 0, messageLength, kcpRouterNode.OuterIpEndPoint);
 
 
                     break;
                     break;
                 }
                 }
@@ -572,7 +555,7 @@ namespace ET.Server
                     }
                     }
 
 
                     kcpRouterNode.LastRecvInnerTime = timeNow;
                     kcpRouterNode.LastRecvInnerTime = timeNow;
-                    self.OuterSocket.SendTo(self.Cache, 0, messageLength, SocketFlags.None, kcpRouterNode.OuterIpEndPoint);
+                    self.OuterSocket.Send(self.Cache, 0, messageLength, kcpRouterNode.OuterIpEndPoint);
                     break;
                     break;
                 }
                 }
             }
             }

+ 2 - 2
Unity/Assets/Scripts/Model/Server/Module/Router/RouterComponent.cs

@@ -9,8 +9,8 @@ namespace ET.Server
     [ComponentOf(typeof(Scene))]
     [ComponentOf(typeof(Scene))]
     public class RouterComponent: Entity, IAwake<IPEndPoint, string>, IDestroy, IUpdate
     public class RouterComponent: Entity, IAwake<IPEndPoint, string>, IDestroy, IUpdate
     {
     {
-        public Socket OuterSocket;
-        public Socket InnerSocket;
+        public IKcpTransport OuterSocket;
+        public IKcpTransport InnerSocket;
         public EndPoint IPEndPoint = new IPEndPoint(IPAddress.Any, 0);
         public EndPoint IPEndPoint = new IPEndPoint(IPAddress.Any, 0);
 
 
         public byte[] Cache = new byte[1500];
         public byte[] Cache = new byte[1500];